24小时热门版块排行榜    

查看: 2045  |  回复: 5

zouji1983

金虫 (正式写手)

[求助] 非线性方程组的解法

如果用fortran解下面两个方程组:
1. 5+3.2ln(x)+ln(1-x)-2x+5x^2+6x^3-3y=0;
2. 0.3x+0.7y=0.9
方程中既有ln,又有3次幂。
应该怎么编程呢?我是用别人的程序,现在需要加入这个。请高手指点,多谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zouji1983

金虫 (正式写手)

或者,如果用matlab的solve函数,怎么转化成fortran呢?
2楼2012-11-21 21:25:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jingjingdou

银虫 (小有名气)

【答案】应助回帖

将上述两个方程化为:
y=(5+3.2ln(x)+ln(1-x)-2x+5x^2+6x^3)/3;
x=(0.9-0.7y)/0.3
然后将(x0,y0)赋初值采用上述式子迭代计算,得到的本次结果(xn,yn)作为下一次结果的初值。循环迭代至前后两次的结果满足精度要求,可以取误差的二范数或者无穷范数等作为判断。
该方法称为迭代法,具体的fortran算法,可以参考gauss-赛德尔迭代算法。网上有很多这样的程序,也可以参见徐士良的《fortran常用算法程序集》这本书。
以上仅介绍计算的主要过程,愿对你有帮助。
不足之处,请见谅……
顺一点,一点就好!
3楼2012-12-22 09:03:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

11jxli1

禁虫 (著名写手)

本帖内容被屏蔽

4楼2012-12-22 21:22:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

615780236

禁虫 (知名作家)

本帖内容被屏蔽

5楼2012-12-24 18:36:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

573245006

至尊木虫 (正式写手)

【答案】应助回帖

解题思路:先对上述方程组第2式进行变形,把1式中y用x代替
最终得:x^22.4=exp(5x-35x^2-42x^3-8)/((1-x))^7
用迭代法VB程序如下:
Dim x, x1 As Single
x = 0.1
For i = 1 To 1000
x1 = ((Exp(5 * x - 35 * x ^ 2 - 42 * x ^ 3 - 8)) / ((1 - x) ^ 7)) ^ (1 / 22.4)
x = x1
Next i
Print x
解得:x=0.3031055
则 y=1.155811929(x带入方程组2式手算得)
6楼2012-12-26 17:52:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zouji1983 的主题更新
信息提示
请填处理意见