声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1058|回复: 4

[编程技巧] fsolve求解非线性方程组问题

[复制链接]
发表于 2008-4-20 15:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求救:
在采用fsolve求解非线性方程组过程中遇到以下问题:
当采用以下格式计算时计算无误:
设置子函数为
function F = myfunyuan(x)
global w1 w2 w3 n1 n2 n3
u=x(1);b=x(2);t=x(3);n=x(4);
F = [-u+f1(b,t);
     -(w1+n1*n)+f2(b,t,u);
     -(w2+n2*n)+f3(b,t,u)
     -(w3+n3*n)+f4(b,t,u);
];
其中f1(b,t),f2(b,t,u),f3(b,t,u),f4(b,t,u)是包含b,t,u,的具体表达式,因为太复杂没有异议列出,在主函数中调用
[x] = fsolve('myfunyuan',[0 0 0 0]');时计算正常。但由于f1~f4在不同情况下是变换的,因此我将以上子函数改写为以下形式:
function F = myfunyuan(x)
global w1 w2 w3 n1 n2 n3

syms  u b t
-
-(该省略部分表示将u,b,t作为变量的运算过程,得到以下计算式)
f1=f(b,t);
f2=f2(u,b,t);
f3=f3(u,b,t);
f4=f4(u,b,t);
再代入以下计算式
u=x(1);b=x(2);t=x(3);n=x(4);
F = [-u+f1;
     -(w1+n1*n)+f2;
     -(w2+n2*n)+f3;
     -(w3+n3*n)+f4;];
在主函数中调用出现以下错误:
??? Conversion to double from sym is not possible.
请问是不是因为在子函数中之前已将u,b,t定义为syms格式 后采用u=x(1);b=x(2);t=x(3);n=x(4);时出错
那么应该怎样修改呢

请各位多提宝贵意见!!!!
回复
分享到:

使用道具 举报

发表于 2008-4-20 15:52 | 显示全部楼层

回复 楼主 的帖子

把程序改成这样试试看:
function F = myfunyuan(u,b,t,n)
global w1 w2 w3 n1 n2 n3
F = [-u+f1(b,t);
     -(w1+n1*n)+f2(b,t,u);
     -(w2+n2*n)+f3(b,t,u)
     -(w3+n3*n)+f4(b,t,u);
];
在主函数中调用
x= fsolve('myfunyuan',[0 0 0 0]',u,b,t,n);

评分

1

查看全部评分

发表于 2008-4-21 21:22 | 显示全部楼层
请问是不是因为在子函数中之前已将u,b,t定义为syms格式 后采用u=x(1);b=x(2);t=x(3);n=x(4);时出错

估计是,这个错误版面讨论过,请搜索
 楼主| 发表于 2008-4-22 09:10 | 显示全部楼层
ch-j 1985 采用你所说的方法之后运行结果提示:
Input argument "t" is undefined.
在计算f1时  需要用到以下计算式
c=ww*t;
以上提示错误表明将u,b,t,n直接写到fuction中后  程序认为没有设置变量u,t,b了 
呵呵  
不知道还有没有其它方法
发表于 2008-4-22 10:21 | 显示全部楼层
原帖由 wszc 于 2008-4-22 09:10 发表
ch-j 1985 采用你所说的方法之后运行结果提示:
Input argument "t" is undefined.
在计算f1时  需要用到以下计算式
c=ww*t;
以上提示错误表明将u,b,t,n直接写到fuction中后  程序认为没有设置变量u,t,b了  ...



能不能把你的程序代码全部帖出来,这样在想方法修改程序之后可以调试?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-12 08:13 , Processed in 0.095940 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表