24小时热门版块排行榜    

查看: 2836  |  回复: 8

z65668396

金虫 (正式写手)

[求助] Matlab用牛顿法求解非线性方程组问题

我的问题是

比如这个方程组
x1.^2-10x1+x2.^2+A=0
     x1*x2.^2+x1-10x2+8=0

其中A是在一定范围变化的  例如从-5~5;
用牛顿法解这个方程组,绘制方程组的解随A变化的曲线
如果A是常量  牛顿法很简单   比如A=8
程序如下:

牛顿迭代M文件
function s=NewtonIterate(x,eps)
%Newton迭代法求非线性方程组
%x为迭代初值,eps为允许误差值
if nargin==1
    eps=1.0e-6;
elseif nargin<1
    error
    return
end  
x1=fx1(x);%非线性方程组
x2=-dfx1(x);%非线性方程组导数
x3=inv(x2);
x0=x3*x1';
while norm(x0)>=eps %循环迭代
      x=x0'+x;
      x1=fx1(x);
      x2=-dfx1(x);
      x3=inv(x2);
      x0=x3*x1';
end
s=x0'+x;
return

非线性方程组M文件
   function y=fx1(x)
   y(1)=x(1)*x(1)-10*x(1)+x(2)*x(2)+8;
   y(2)=x(1)*x(2)*x(2)+x(1)-10*x(2)+8;
   y=[y(1) y(2)];

偏导M文件
  function y=dfx1(x)
     y(1)=2*x(1)-10;
     y(2)=2*x(2);
     y(3)=x(2)*x(2)+1;
     y(4)=2*x(1)*x(2)-10;
     y=[y(1) y(2);y(3) y(4)];

如果A是变量,就要改动非线性方程组的M函数,

  function y=fx1(x)
A=-5:5;
   y(1)=x(1)*x(1)-10*x(1)+x(2)*x(2)+A;
   y(2)=x(1)*x(2)*x(2)+x(1)-10*x(2)+8;
   y=[y(1) y(2)];
运行报错
不知道哪位大神能够解答一下
非常感谢
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

心有猛虎,细嗅蔷薇。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

【答案】应助回帖


感谢参与,应助指数 +1
1592203609: 金币+1, 谢谢回帖 2013-09-05 15:59:03
A= -5:5  这应该改成某个值,比如5.
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
2楼2013-09-05 14:04:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

【答案】应助回帖


1592203609: 金币+1, 谢谢回帖 2013-09-05 15:59:16
matlab自带的fsolve函数可以求非线性方程组,楼主可以试试
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
3楼2013-09-05 14:18:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
z65668396: 金币+10, ★★★很有帮助 2013-09-05 15:41:47
1592203609: 金币+2, 谢谢回帖 2013-09-05 15:59:34
z65668396: 金币+10, ★★★很有帮助 2013-09-06 16:55:11
看看这段程序结果
CODE:
% 主程序
global a;
for a= -5:5
    x=[1,2]; %随便给的初值
    z=fsolve(@fun,x,optimset('fsolve')) % 对应每次a的计算结果
end

% 子函数
function y=fun(x)
    global a;
    y(1)=x(1)*x(1)-10*x(1)+x(2)*x(2)+a;
    y(2)=x(1)*x(2)*x(2)+x(1)-10*x(2)+8;
end

我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
4楼2013-09-05 14:28:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
4楼: Originally posted by baobiao007 at 2013-09-05 14:28:32
看看这段程序结果

% 主程序
global a;
for a= -5:5
    x=; %随便给的初值
    z=fsolve(@fun,x,optimset('fsolve')) % 对应每次a的计算结果
end

% 子函数
function y=fun(x)
    global a;
    y(1) ...

非常感谢,可是我的非线性方程组比这个复杂,帖子里只是举了个自理,而且我的非线性方程组对初值要求比较高
不知道牛顿法能不能实现我要的这个效果?
心有猛虎,细嗅蔷薇。
5楼2013-09-05 15:44:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

★ ★
xiegangmai: 金币+2, 鼓励讨论交流! 2013-09-08 22:20:50
1.   多看几本matlab书,看其中关于解非线性方程组的部分的例子复杂度是否能满足你的要求,可以就用fsolve搞定
2. 若你待求解的方程组确实很复杂。那么找专门介绍数值计算的书籍和经典现成的数值软件包来解,比自己写的代码靠谱些,毕竟是经过多少人的锤炼和考验的。
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
6楼2013-09-05 16:06:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
6楼: Originally posted by baobiao007 at 2013-09-05 16:06:05
1.   多看几本matlab书,看其中关于解非线性方程组的部分的例子复杂度是否能满足你的要求,可以就用fsolve搞定
2. 若你待求解的方程组确实很复杂。那么找专门介绍数值计算的书籍和经典现成的数值软件包来解,比自己 ...

嗯  谢谢
我现在是实现一篇文献中的曲线
这个方程组我看到的文献基本都是用牛顿法解的
这篇文献也给了初值的选取和迭代过程
非常感谢你的回答  
我再研究研究
心有猛虎,细嗅蔷薇。
7楼2013-09-05 16:21:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

引用回帖:
5楼: Originally posted by z65668396 at 2013-09-05 15:44:21
非常感谢,可是我的非线性方程组比这个复杂,帖子里只是举了个自理,而且我的非线性方程组对初值要求比较高
不知道牛顿法能不能实现我要的这个效果?...

定初值是件非常麻烦的事,一般用户很难猜出较好的初值。建议试试1stOpt,几乎与初值无关。
8楼2013-10-26 23:26:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z65668396

金虫 (正式写手)

引用回帖:
8楼: Originally posted by dingd at 2013-10-26 23:26:29
定初值是件非常麻烦的事,一般用户很难猜出较好的初值。建议试试1stOpt,几乎与初值无关。...

嗯  谢谢斑竹
文献里给出了用牛顿解法的初值,我把它用到fsolve里了
不知道可行不?
心有猛虎,细嗅蔷薇。
9楼2013-10-27 09:52:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 z65668396 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 只有每年这种时候来逛逛小木虫 +8 yaoyewhu2008 2026-08-20 8/400 2026-08-20 08:46 by since—2010
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +55 医学老男孩 2026-08-13 123/6150 2026-08-19 23:44 by stan_et
[基金申请] 时间戳变了,能看出什么问题? +12 基诺咪客 2026-08-17 16/800 2026-08-19 22:04 by kk 的小木虫
[基金申请] filecode,4个jtjc了 +11 ziyangfang 2026-08-19 13/650 2026-08-19 21:28 by aasahr
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +5 瞬息宇宙 2026-08-15 5/250 2026-08-19 20:23 by super2002521
[基金申请] 今天放榜没戏了吧 +4 yuleib84 2026-08-19 5/250 2026-08-19 19:52 by hhs666
[基金申请] 今天放榜吗? +14 布布和一二 2026-08-19 15/750 2026-08-19 18:07 by gltch
[基金申请] filecode=后面第一个是大写字母 +10 wangze12014 2026-08-14 12/600 2026-08-19 16:56 by 苦难博士
[基金申请] 2027广东省杰青 +4 奶牛小黑 2026-08-15 10/500 2026-08-19 11:02 by wanfengnew
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 重要消息,中午系统在维护 +10 yuleib84 2026-08-18 11/550 2026-08-19 07:30 by 羽毛枫f
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[论文投稿] 投稿咨询 +4 wwm09 2026-08-17 6/300 2026-08-18 15:36 by wwm09
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +13 Ldrop2023 2026-08-13 16/800 2026-08-18 12:25 by 淀粉搬运工
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
信息提示
请填处理意见