chenyouzhi 发表于 2009-4-22 19:15:24

非线性方程组的依次求解问题

郑重声明:得到的这个方程组已经三个周了,这三个周我调试了好多程序来计算,但都以失败告终,期间,本人也来到本论坛向高手们请教过,但由于本人MATLAB水平的确一般,至今未能解决,实在承受不住心理压力了,故把问题发上来,请高手能给与指点!万分感谢!!!
至于我自己以前编写的程序太杂太乱,我也不知道该发哪一个好了,就不打算发上来误导大家了……

详见图片

chenyouzhi 发表于 2009-4-22 19:16:23

是依次从后向前进行求解合适呢还是把这2*n个方程作为一个方程组,然后使用牛顿法进行迭代更容易实现呢?

shamohu 发表于 2009-4-23 09:24:24

试下1stOpt的循环计算功能,好像还比较容易解决这类递推方程求解问题。公式中d值没有给出,这里假设为1:
LoopConstant Tn(100)=, Bn(100)=;
Constant n=100, h=100/n;
Constant w=4.624, p=0.682, Ct=0.01, Cn=0.9, v=1.39, e=2, d=1;
Function Tn-x=h/2*(-w*(sin(Bn)+sin(y))+p/2*d*pi*Ct*v^2*(sqrt(1+e*Tn)*cos(Bn)^2+sqrt(1+e*x)*cos(y)^2));
         Bn-y=h/(Tn+x)*(-w*(cos(Bn)+cos(y))+p/2*d*pi*Cn*v^2*(sqrt(1+e*Tn)*sin(Bn)^2+sqrt(1+e*x)*sin(y)^2));

结果:
循环常数 tn        循环常数 bn
191        0.155
191.362205675088        0.173735303995938
191.808880999707        0.191180837063731
192.333811952703        0.207309674306321
192.930717291335        0.222123641454805
193.593381366454        0.235648571228013
194.315761691498        0.247929359113724
195.092071343213        0.259025188348307
195.916837943556        0.269005178098737
196.78494200496        0.277944602638206
197.691637914118        0.285921742651183
198.632560915399        0.293015366014935
199.603723266712        0.29930279331246
200.601502391846        0.304858479371236
201.62262343128        0.309753031903923
202.664138158815        0.314052587627473
203.72340182216        0.317818471499799
204.79804910244        0.321107073213444
205.885970078953        0.323969884895915
206.985286832019        0.326453653827096
208.094331114409        0.328600613148307
209.211623364466        0.330448761623516
210.335853214579        0.332032170383005
211.465861560254        0.333381300246537
212.600624191499        0.334523317784601
213.739236944064        0.335482401870615
214.880902298849        0.336280035253667
216.024917339729        0.336935277785385
217.170662970297        0.337465019496781
218.317594286212        0.337884212854996
219.465232000241        0.338206084330914
220.613154820332        0.338442325954895
221.76099268613        0.338603267891914
222.908420775539        0.338698033279046
224.055154199664        0.338734676676067
225.200943311389        0.338720307513865
226.345569559687        0.338661199907941
227.488841828309        0.338562890152668
228.63059320374        0.338430263138621
229.77067812305        0.338267628849551
230.908969857599        0.338078790003969
232.045358293409        0.337867101813433
233.179747973386        0.337635524738791
234.312056370554        0.337386671038715
235.442212365004        0.337122845823252
236.57015490042        0.336846083249498
237.695831798892        0.336558178427073
238.819198715216        0.336260715537955
239.940218214105        0.33595509261813
241.058858955722        0.335642543397184
242.175094976665        0.335324156546018
243.288905055081        0.335000892641851
244.400272149933        0.334673599123215
245.509182905652        0.334343023475287
246.615627214432        0.334009824857243
247.719597829379        0.333674584358002
248.821090022515        0.333337814044341
249.920101282367        0.332999964945674
251.016631046503        0.33266143410239
252.110680464914        0.332322570789371
253.202252190649        0.331983682012846
254.291350194524        0.331645037366912
255.377979601107        0.33130687332566
256.462146543511        0.330969397037685
257.543858034822        0.330632789681749
258.62312185424        0.3302972094353
259.699946446243        0.32996279410135
260.774340831274        0.329629663433774
261.846314526633        0.329297921196308
262.915877476411        0.328967656986311
263.983039989433        0.328638947850659
265.047812684294        0.328311859717908
266.110206440694        0.327986448667985
267.170232356351        0.327662762058166
268.227901708863        0.327340839521885
269.283225921961        0.32702071385498
270.336216535665        0.326702411802262
271.386885179892        0.326385954755789
272.435243551147        0.32607135937491
273.481303391931        0.325758638136955
274.525076472581        0.325447799826436
275.566574575262        0.325138849969699
276.605809479868        0.324831791221182
277.642792951631        0.324526623706716
278.677536730233        0.324223345328686
279.71005252027        0.323921952037312
280.740351982903        0.323622438071841
281.768446728576        0.323324796174983
282.794348310675        0.323029017783585
283.818068220028        0.322735093198146
284.839617880149        0.322443011733535
285.859008643147        0.32215276185298
286.876251786222        0.321864331287156
287.891358508686        0.32157770714003
288.904339929448        0.321292875982892
289.915207084913        0.321009823937887
290.923970927245        0.320728536752178
291.93064232296        0.320448999863769
292.935232051801        0.32017119845989
293.937750805873        0.319895117528766

不知理解是否正确?

messenger 发表于 2009-4-23 09:55:00

如果你的方程没有错,当然是从后向前进行求解容易了,不过感觉你的方程不对。

是依次从后向前进行求解合适呢还是把这2*n个方程作为一个方程组,然后使用牛顿法进行迭代更容易实现呢?
chenyouzhi 发表于 2009-4-22 19:16 http://forum.simwe.com/images/common/back.gif

chenyouzhi 发表于 2009-4-23 18:42:38

4# messenger

呵呵,对这个方程我有信心,毕竟是费尽心机推导出来的……

chenyouzhi 发表于 2009-4-23 18:48:57

本帖最后由 chenyouzhi 于 2009-4-23 18:56 编辑

3# shamohu

版主的程序和我平时所见到的matlab语言不一样,请问是用什么语言编写的?
1stopt ?

shamohu 发表于 2009-4-24 08:46:40

是1stOpt的代码。H20版有其专题。

chenyouzhi 发表于 2009-4-25 10:08:06

7# shamohu

我用你给的代码回去在1.5试用版上调试了一下,但因为第一次接触这个软件,很多地方都不清楚……
1、您选用的是哪一种算法
2、计算之后的结果怎么显示出来

shamohu 发表于 2009-4-27 08:28:20

1.5版太老了,不支持循环计算。

smarten 发表于 2009-4-28 10:35:49

本帖最后由 smarten 于 2009-4-27 20:37 编辑

Mathematica 解的。 Matlab应该能做的。
n = 100; h =
100/n; w = 4.624; p = 0.682; Ct = 0.01; Cn = 0.9; v = 1.39; e = 2; d \
= 1;
f[{Tn_, Bn_}] := {x, y} /.
FindRoot[{Tn - x ==
   h/2*(-w*(Sin + Sin) +
      p/2*d*Pi*Ct*
         v^2*(Sqrt[(1 + e*Tn)]*Cos^2 + Sqrt[(1 + e*x)]*Cos^2)),
    Bn - y ==
   h/(Tn + x)*(-w*(Cos + Cos) +
      p/2*d*Pi*Cn*
         v^2*(Sqrt[(1 + e*Tn)]*Sin^2 +
         Sqrt[(1 + e*x)]*Sin^2))}, {{x, Tn}, {y, Bn}},
   AccuracyGoal -> Infinity, PrecisionGoal -> 8]
tt = NestList;ListPlot 得到:

wanglei5201118 发表于 2009-4-29 12:21:46

你的程序怎么在Mathematica中运行啊?初学者,向大家学习了!

chenyouzhi 发表于 2009-4-29 19:56:03

本帖最后由 chenyouzhi 于 2009-4-29 19:57 编辑

10# smarten

谢谢你的帮忙了,我已经用MATLAB计算出来了,不过我的方法是先把这两个方程的雅克比矩阵手工推出来的,然后使用牛顿法进行迭代求解!
可不知道以后如果遇到3个、6个方程联立组成的方程组该怎么处理,头疼啊……


(MATLAB符号工具箱可以直接求雅克比矩阵,但数值计算中是不是无法直接求得雅克比矩阵啊?)
页: [1]
查看完整版本: 非线性方程组的依次求解问题