MATLAB 板


LINE

各位大大晚安! 最近為了求解非線性方程組而傷透腦筋,本人有參考一本書【應用數值分析】,其中有提 到運用高斯消去法及牛頓迭代法可以解出,但是我運用其code卻無法跑出解,請各位大大 幫忙解題了! (1)gauss99.m (2)A_nonlinear_newton.m (3)func1.m %func1是放我要解的聯立方程組 (1) function [x]=gauss99(A,b) %本方法為Guass消去法 %A=input('輸入矩陣A='); %b=input('輸入矩陣b='); [m,n]=size(A); exa=[A b]; %fprintf('原方程式係數為:\n') gg=0; for i=1:n for j=1:n+1 % fprintf('%8.3f ',exa(i,j)); end % fprintf(';\n'); end %scaling for i=1:n max=exa(i,1); for j=2:n if abs(max)<abs(exa(i,j)) max=exa(i,j); end end for jj=1:n+1 if abs(max)<0.00001 gg=1;exa(i,jj)=0; else exa(i,jj)=exa(i,jj)/max; end end end %fprintf('scaling後方程式係數為:\n') for k=1:n-1 %以下為轉軸 Pivoting jjj=0; max=exa(k,k); for kk=k+1:n if abs(max)<abs(exa(kk,k)) max=exa(kk,k); jjj=kk; end end if jjj~=0 if k~=jjj for i=1:n+1 temp=exa(k,i); temp1=exa(jjj,i); exa(k,i)=temp1; exa(jjj,i)=temp; end end end for i=k+1:n if abs(exa(k,k))<0.00001 gg=1;pp=0; else pp=exa(i,k)/exa(k,k); end for j=k:n+1 exa(i,j)=exa(i,j)-pp*exa(k,j); end end end %fprintf('轉軸及消去後方程式係數為:\n') for i=1:n for j=1:n+1 end end %以下為往回代入法 backward substitute if abs(exa(n,n))<0.0001 gg=1; x(n)=999; else x(n)=exa(n,n+1)/exa(n,n); end for i=n-1:-1:1 rr=0; for k=i+1:n rr=rr+exa(i,k)*x(k); end if gg==1 x(n)=999; x(i)=999; else x(i)=(exa(i,n+1)-rr)/exa(i,i); end end (2) function A_nonlinear_newton(func1,gauss99) %解非線性聯立方程式 n=input('輸入方程式數目n='); ii=0;ik=0; xb=input('範圍下界xb='); xn=input('範圍上界xn='); tol=input('輸入允許誤差tol='); max=input('輸入最大計算次數max='); nn=(xn-xb)/0.5; for i1=1:nn+1 xk(1)=xb+(i1-1).*0.5; for i2=1:nn+1 xk(2)=xb+(i2-1).*0.5; for i3=1:nn+1 xk(3)=xb+(i3-1).*0.5; ii=0; for i=1:n x(i)=xk(i); end while (1) for i=1:n for j=1:n y(j)=x(j); if i==j y(j)=x(j)+0.001; end end z=feval(func1,x); zz=feval(func1,y); for k=1:n d(k,i)=(zz(k)-z(k))/0.001; end end if x(1)==999 break; end A=[d]; b=-[z]; for i6=1:n for j6=1:n if abs(A(i6,j6))>100000 break; end end end for i6=1:n if abs(b(i6))>100000 break; end end bb=b'; [xx]=feval(gauss99,A,bb); pp=1; for i=1:n if abs(xx(i))>999 pp=0; xx(i)=999; break; end if abs(xx(i))>tol pp=0; end end if pp==1 ik=ik+1; for i=1:n xy(i,ik)=x(i)+xx(i); exx(i,ik)=xx(i); g(i,ik)=xk(i); end break; end ii=ii+1; if ii>max break; end for i=1:n x(i)=x(i)+xx(i); end end end end end ka=1; for i=1:n fprintf('第%d組答案:x(%d)=%f;誤差x(%d)=%f',ka,i,xy(i,1),i,exx(i,1)); fprintf(',初始值座標x(%d)=%f\n',i,g(i,1)); ans(i,ka)=xy(i,1); err(i,ka)=xy(i,1); gk(i,ka)=g(i,1); end for j=2:ik pi=0; %for k=1:ka k=0; while (k<ka) k=k+1; % pi=0; for i=1:n if abs(xy(i,j)-ans(i,k))<0.01 pi=pi+1; end end if pi==n pi=1; break; else pi=0; end end if pi==0 ka=ka+1; for ip=1:n ans(ip,ka)=xy(ip,j);err(ip,ka)=exx(ip,j);gk(ip,ka)=g(ip,j); fprintf('第%d組答案:x(%d)=%f,誤差x(%d)=%f',ka,ip,ans(ip,ka),ip,err(ip,ka)); fprintf(',初始值座標x(%d)=%f;\n',ip,gk(ip,ka)) end end end (3) function y = func1(x) %定義非線性方程式_FULL_PARAMETER P = 1; Q1 = 4; Q2 = 3; Q3 = 2; N0 = 3; N1 = 2; N2 = 1; N3 = 1; T = 42; SINR = 5; %L21 = 3.6055; %L22 = 4.5826; L21 = 3; L22 = 4; L23 = 5; c1 = 4*((2*Q3)+Q2)*Q3*N1*T; c2 = 2*SINR*Q1*N0*(2*Q3+Q2+Q1)*Q3; c3 = (-2)*P*(2*Q3+Q2+Q1)*Q3*N1*T; c4 = (-2)*(P^2)*((2*Q3+Q2)^3)*((N1*T)^2); c5 = (-SINR)*Q1*N0*(2*Q3+Q2+Q1)*P*(2*Q3+Q2); c6 = (P^2)*(2*Q3+Q2+Q1)*(2*Q3+Q2)*N1*T; c7 = (-P)*2*Q3*N2*T; c8 = (-SINR)*P*Q2*N0*(2*Q3+Q2); c9 = (N0/(N1*T))*2*Q3*(2*Q3+Q2+Q1)*N2*T; c10 = -(N0/(N1*T))*P*(2*Q3+Q2+Q1)*(2*Q3+Q2)*N2*T; c11 = (P^2)*N2*T; c12 = (-SINR)*((2*Q3)/(2*Q3+Q2+Q1))*(N0/N3*T)*((2*L21)+(2*L22)+(2*L23)); c13 = N0/(N1*T); c14 = (P/(2*Q3+Q2+Q1))-(N0/(N2*T)); y(1) = (c1*x(1)) + (c2*x(2)) - (c3*x(1)*x(3)) - (c5*x(2)*x(3)) + (c6*x(1)*x(2)*x(3)); y(2) = -(c7*x(1)*x(2)) + (c8*x(1)*x(3)) + (c9*x(2)) - (c10*x(2)*x(3)) + (c11*x(1)*x(2)*x(3)); y(3) = -(c12*x(1)) - (c13*x(2)*x(3)) + (c14*x(1)*x(2)*x(3)); ------------------------------------------------------------------------------ 以上為3個.檔,執行後顯示以下訊息 >> A_nonlinear_newton('func1','gauss99') 輸入方程式數目n=3 範圍下界xb=0 範圍上界xn=10 輸入允頂~差tol=0.001 輸入最大計算次數max=20 ??? Undefined function or variable "xy". Error in ==> A_nonlinear_newton at 86 fprintf('第%d組答案:x(%d)=%f;誤差x(%d)=%f',ka,i,xy(i,1),i,exx(i,1)); ------------------------------------------------------------------------------ 我有想過可能是因為區間設定的問題,但試過好多區間依然這麼顯示,而因為我要求解的 值為正值,所以現在不知道是code的問題還是有其它問題存在,麻煩大大們解題了! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.244.175.119
1F:→ swallowyann:忘了補充最後要求的是x(1)、x(2)、x(3),三個數值 07/02 18:57
2F:→ swallowyann:x(3)理應較大,x(1)最小! 07/02 18:58
3F:→ jengfu:樓主大大@@ 真的有人會幫你看這麼長的文章嗎? 07/22 20:57







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP