声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: manking

[编程技巧] 求助,求解一个非线性方程组【已经编辑初值问题】

[复制链接]
发表于 2007-1-6 23:32 | 显示全部楼层
我用matlab解的,fsovle需要赋初始值才能解...我是将xymn的初始值
均赋为0进行求解的。具体要给他们赋什么值偶觉得应该根据所求实
际问题的解的区间来确定。
function non_linearfun
x0=[0 0 0 0];
answer_x_y_m_n=fsolve(@fun,x0)
function y=fun(x)
R=50;
D=10;
beta=0.75;
p=10e6;
y(1)=p+2*beta*R^3*x(1)/(3*R+2*D-x(3))^3+2*beta*R^3*x(1)/(3*R+D-x(3))^3+2*beta*R^3*x(2)/(R+D-x(4))^3-R^3*x(2)/(R-x(4))^3;
y(2)=p+2*beta*R^3*x(1)/(5*R+2*D-x(3))^3+2*beta*R^3*x(1)/(R+D-x(3))^3+2*beta*R^3*x(2)/(3*R+D-x(3))^3-R^3*x(2)/(R+x(4))^3;
y(3)=p+2*beta*R^3*x(1)/(5*R+2*D-x(3))^3+2*beta*R^3*x(2)/(3*R+2*D-x(4))^3+2*beta*R^3*x(2)/(R+D+x(4))^3-R^3*x(1)/(R-x(3))^3;
y(4)=p+2*beta*R^3*x(1)/(7*R+3*D-x(3))^3+2*beta*R^3*x(2)/(5*R+2*D-x(4))^3+2*beta*R^3*x(2)/(3*R+D+x(4))^3-R^3*x(1)/(R+x(3))^3;
结果:
answer_x_y_m_n =

   23.1647    2.3523  -49.3384    0.4916
回复 支持 反对
分享到:

使用道具 举报

发表于 2007-1-7 00:03 | 显示全部楼层

回复

原帖由 dingd 于 2007-1-6 22:27 发表
这道题有点意思啊,用1stOpt又找到一组解,不知对否,大家验证一下:

x: -6284980.20782905
m: 12.0166413640221
y: 21836463.6740884
n: 122.909601202379


1stOpt计算时, 在不知初值的情况下, 一般是随机赋值的,所以出现每次的计算结果不同也不奇怪.
尤其是"真正做到全局最优"本身仍是一个难题,应用“麦考特+通用全局优化”也只能以较小的概率得到最优。

每种软件都有其长处,不宜贬此褒彼,而是要善于运用各自长处去解决问题.
发表于 2007-1-7 00:30 | 显示全部楼层
xjzuo估计用的是1.5破解版,如果用2.0,应用“麦考特+通用全局优化”,则几乎以100%的概率收敛到最优。

Matlab是公认的数学老大,无其它能比,但在全局优化方面,的确不如1stOpt。如汝言“每种软件都有其长处”

相信本论坛看了我对1stOpt的介绍,从不知道,到了解,到正在使用者(不管正版还是盗版)不在少数。多一种比较、多一种选择总是有益无害的。
 楼主| 发表于 2007-1-7 16:12 | 显示全部楼层
谢谢各位的讨论
原来有一个参数写错了
已经修正:@L
发表于 2007-1-8 10:29 | 显示全部楼层
%%%---------------------------------------------%%%
本是一个看看fsolve帮助就能解决的小问题(搜索一下论坛此类问题也已解答过多次),
却阴差阳错(先是买卖贴的不当,后是一点小争执)地搞得很热闹,这也算是一个很典型的重复的例子吧.
不过再次讨论也没什么不好,只是希望以此例为鉴,发贴时请务必先注意一下:
1.买卖贴不要发;
2.题目最好要清楚.
什么跪求、小妹、...等说法请不要带到本论坛来.
否则,很可能会被当成垃圾贴删除.
%%%---------------------------------------------%%%
By xjzuo



[ 本帖最后由 xjzuo 于 2007-1-8 10:30 编辑 ]
发表于 2007-4-11 11:11 | 显示全部楼层

求助

怎么在m文件中使用积分函数阿
发表于 2007-4-11 11:14 | 显示全部楼层

帮忙看看这个程序怎么调阿!谢谢斑竹

function out=fun(x,d)
t=0:10:380;
n=1:1:39;
y=[0.42 0.59 0.75 0.89 0.90 0.90 0.90 0.89 0.89 0.89 0.89 0.89 0.89 0.88 0.88 0.88 0.88...
   0.88 0.87 0.87 0.87 0.88 0.88 0.88 0.88 0.89 0.89 0.89 0.89 0.88 0.90 0.90 0.90 0.88 0.86 0.82 0.79 0.75 0.70];
axis([0 380 0 1.0 ]);
Tr=[30.50 43.10 57.40 57.77 57.97 57.90 57.70 57.70 57.70 57.70 57.70 57.70 57.70 57.67 57.67 57.67 57.67 57.63 57.63 57.67...
    57.67 57.67 57.67 57.67 57.67 57.67 57.67 57.67 57.67 57.63 57.63 57.63 57.63 57.67 57.57 57.50 57.50 57.50 57.50];
w=[1.00 1.00 1.00 1.00 0.89 0.82 0.88 0.85 0.84 0.84 0.83 0.80 0.80 0.78 0.78 0.77 0.77 0.78 0.76 0.81 0.76 0.78 0.80 0.76...
    0.78 0.77 0.78 0.76 0.75 0.72 0.73 0.74 0.77 0.78 0.77 0.85 0.87 0.90 0.93];
t2=[50.00 50.00 50.00 50.00 47.00 48.00 43.00 43.00 43.00 43.00 43.00 42.00 41.00 40.00 40.00 39.00 39.00 38.00 38.00 38.00 38.00...
    39.00 38.00 37.00 37.00 37.00 37.00 37.00 37.00 37.00 36.00 36.00 37.00 37.00 37.00 38.00 40.00 43.00 44.00]
t1=[50.00 50.00 50.00 50.00 44.00 43.00 39.00 39.00 39.00 38.00 37.00 36.00 36.00 36.00 35.00 35.00 35.00 34.00 34.00 34.00 34.00...
    34.00 34.00 34.00 34.00 34.00 33.00 33.00 33.00 33.00 32.00 32.00 33.00 34.00 33.00 34.00 36.00 39.00 40.00]
e=t2-t1
s=w.*e
c=4.02*exp(1.99*10^-4*Tr)
hr=11*1.64*10^6+157.2*Tr
z=1./hr
if t<=60
        f=0;m=f*(Tr-20)
else  f=1;
m=f*(Tr-20)
end
k=m+s;
d=c.*k.*z;
out=(1011.0-0.4484*x).*d
z=quad('fun',0,t);
plot(t,z);

运行的时候总是说x没有定义
发表于 2007-4-11 11:15 | 显示全部楼层

求助

z=quad('fun',0,t);不会使用这个积分函数
发表于 2007-4-11 11:28 | 显示全部楼层
原帖由 zhaowei_1003 于 2007-4-11 11:15 发表
z=quad('fun',0,t);不会使用这个积分函数


看看matlab的例子:

    Example:
       Q = quad(@myfun,0,2);
    where myfun.m is the M-file function:
       %-------------------%
       function y = myfun(x)
       y = 1./(x.^3-2*x-5);
       %-------------------%

    or, use a parameter for the constant:
       Q = quad(@(x)myfun2(x,5),0,2);
    where myfun2 is the M-file function:
       %----------------------%
       function y = myfun2(x,c)
       y = 1./(x.^3-2*x-c);
       %----------------------%
发表于 2007-4-12 13:32 | 显示全部楼层
原帖由 dingd 于 2007-1-6 21:58 发表
很抱歉啊,公式里弄错一个符号导致错误结果。

这类非线性方程组,Matlab可以解,但难点是初值不好定。五楼flybaly的Matlab代码中的初值不知是如何定出的?有何诀窍?不会是先参照 1stOpt的计算结果吧?:lol  ...

土问1stOpt采用什么算法啊,求解非线性方程组初值的选择很头疼的,用一些全局收敛算法速度又慢
发表于 2007-4-12 14:48 | 显示全部楼层
原帖由 grta 于 2007-4-12 13:32 发表

土问1stOpt采用什么算法啊,求解非线性方程组初值的选择很头疼的,用一些全局收敛算法速度又慢



一个软件,不是算法
发表于 2007-4-26 17:28 | 显示全部楼层
原帖由 dingd 于 2007-1-7 00:30 发表
xjzuo估计用的是1.5破解版,如果用2.0,应用“麦考特+通用全局优化”,则几乎以100%的概率收敛到最优。

Matlab是公认的数学老大,无其它能比,但在全局优化方面,的确不如1stOpt。如汝言“每种软件都有其长处 ...

2.0版本哪里下载?没有找到啊,我在北方,教育网,给个速度快的地址!谢谢先
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-12 13:28 , Processed in 0.066748 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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