studyboy 发表于 2006-7-5 23:02

【原创】变参数非线性方程组的求解!

对于求解非线性方程组一般用fsolve命令就可以了,但是对于方程组中某一系数是变化的,该怎么求呢?

%定义方程组如下,其中k为变量
function F = myfun(x,k)
H=0.32; Pc0=0.23; W=0.18;
F=;

%求解过程
H=0.32; Pc0=0.23; W=0.18;
x0 = ;         % 取初值
options = optimset('Display','off');
k=0:0.01:1;             % 变量取值范围
for i=1:1:length(k)
kk=k(i);                        
x = fsolve(@(x) myfun(x,kk), x0, options);%求解非线性方程组
x1(i)=x(1); x2(i)=x(2);
end
plot(k,x1,'-b',k,x2,'-r'); xlabel('k'); legend('x1','x2')

很简单,大家见笑了!

[ 本帖最后由 ChaChing 于 2009-9-9 22:09 编辑 ]

andy_3656 发表于 2006-7-6 22:36

不用谦虚哦,大家到这里来就是相互学习的啊!

无水1324 发表于 2006-7-24 19:58

不要谦虚了
大哥太感谢了
我也作了一个,但是总是出问题,好好研究一下你的,虽然别人说太简单了
但是对于我这种初学,不深的人来说,
简直太好了。。。

x = fsolve(@(x) myfun(x,kk), x0, options);%求解非线性方程组

这个怎么解释,有点问题哦

studyboy 发表于 2006-7-30 17:37

不好意思,前几天不在。
其实这一问题的关键求解就在于:
x = fsolve(@(x) myfun(x,kk), x0, options);%求解非线性方程组。
这里把kk作为第二个参数代入非线性方程组,然后求得某一kk值时的解,释放kk。然后继续循环kk。这样就可以得到整个kk取值区间上的解了。
具体内容可以参考Matlab help中的fslove中 的变参数部分。

jaguar 发表于 2006-8-7 21:33

x = fsolve(@(x) myfun(x,kk), x0, options);%求解非线性方程组。
这句话好像matlab 6.5 里通不过呀,
Line: 15 Column: 13
"identifier" expected, "(" found.
能否请解释一下

qqzjyywx 发表于 2006-8-19 15:56

??? Error: File: D:\MATLAB6p5\work\Untitled2222.m Line: 16 Column: 13
"identifier" expected, "(" found.
同样的问题怎么回事 阿?

studyboy 发表于 2006-8-19 21:45

我是在7的环境下面运行的,具体的6.5的情况不太清楚。不好意思。

welcoemjimy 发表于 2006-10-19 14:05

不错 我是刚学的半天纔農明白

[ 本帖最后由 无水1324 于 2007-7-23 12:06 编辑 ]

wugang326 发表于 2006-10-19 18:07

如果KK值事先不能确定,都要靠前一次的计算结果迭代产生,应该怎么办啊

suffer 发表于 2006-10-20 15:31

原帖由 jaguar 于 2006-8-7 21:33 发表
x = fsolve(@(x) myfun(x,kk), x0, options);%求解非线性方程组。
这句话好像matlab 6.5 里通不过呀,
Line: 15 Column: 13
"identifier" expected, "(" found.
能否请解释一下


6.5的调用格式有点不一样,只用修改一下这一句就行了
x = fsolve(@myfun, x0, options,kk);%求解非线性方程组

suffer 发表于 2006-10-20 15:32

原帖由 wugang326 于 2006-10-19 18:07 发表
如果KK值事先不能确定,都要靠前一次的计算结果迭代产生,应该怎么办啊

这里再把完整的程序帖一下,实际上只是改动了一个句子:H=0.32; Pc0=0.23; W=0.18;
x0 = ;         % 取初值
options = optimset('Display','off');
k=0:0.01:1;             % 变量取值范围
for i=1:1:length(k)
kk=k(i);                        
x = fsolve(@myfun, x0, options,kk);%求解非线性方程组
x1(i)=x(1); x2(i)=x(2);
end
plot(k,x1,'-b',k,x2,'-r'); xlabel('k'); legend('x1','x2')
function F = myfun(x,k)
H=0.32; Pc0=0.23; W=0.18;
F=[Pc0+H*(1+1.5*(x(1)/W-1)-0.5*(x(1)/W-1)^3)-x(2);
    x(1)-k*sqrt(x(2))];

[ 本帖最后由 ChaChing 于 2009-2-26 13:58 编辑 ]

michael1003 发表于 2006-12-22 20:00

将k设为全局变量,应该也可以解决这个问题吧。

chbo76 发表于 2007-6-8 23:06

好,不错。
谢谢。:lol

花如月 发表于 2007-7-23 11:55

好文章,俺给顶起来

huanhuan023 发表于 2007-11-1 11:01

为什么同样的程序到我机子上就不能运行呢?
是我装的软件的问题吗?疑惑中……我的也是7.0版本……
页: [1] 2 3
查看完整版本: 【原创】变参数非线性方程组的求解!