qingdaocdp 发表于 2008-10-28 08:53

新手求助1stOpt求解超定非线性方程组

有限元得到的一个维数201X190的超定稀疏非线性方程组,用matlab求解的时候有的参数计算结果收敛的很好,有的参数结果就不收敛,就想借助1stOpt来求解,但是刚刚接触有许多地方还不明白,这么大的方程组,是不是也得一个一个方程输入,能不能像matlab一样用矩阵来表示

dingd 发表于 2008-10-28 10:40

虽然麻烦,但应该可以,用for语句。下面是个简单的例子:
Function
1/(x1+x2*(160.73)^(x3))+x4*(160.73)^x5-(6302.25)-(0.1*1) = 0;
1/(x1+x2*(111.85)^(x3))+x4*(111.85)^x5-(2090.46)-(0.1*2) = 0;
1/(x1+x2*(67.717)^(x3))+x4*(67.717)^x5-(487.44)-(0.1*3) = 0;
1/(x1+x2*(53.836)^(x3))+x4*(53.836)^x5-(1452.07)-(0.1*4) = 0;
1/(x1+x2*(40.602)^(x3))+x4*(40.602)^x5-(5557.26)-(0.1*5) = 0;

可以写成:
Constant a=,
                  b=;
Function For(i=1:5,a,b)(1/(x1+x2*a^(x3))+x4*a^x5-b=0.1*i);

qingdaocdp 发表于 2008-10-28 13:53

回复 沙发 dingd 的帖子

谢谢,有点启发!1stOpt有没有矩阵相乘运算,矩阵转置,按照上面的提示一百多个变量的系数列向量一个一个全部写出来也是很费时间的,另外上面的a,b都是行向量,有没有列向量这一说,谢谢!小弟昨天刚刚入手,不懂的地方实在太多,这方面的资料也少

dingd 发表于 2008-10-28 15:58

写成下面效果也是一样的:
DataSet;
      a,b=
      160.73        6302.25
      111.85        2090.46
      67.717        487.44
      53.836        1452.07
      40.602        5557.26
EndDataSet;
Function For(i=1:5,a,b)(1/(x1+x2*a^(x3))+x4*a^x5-b=0.1*i);

qingdaocdp 发表于 2008-10-29 10:31

回复 地板 dingd 的帖子

主任,怎么你写的形式考过去说表达式有误呢,不知道怎么修改,开始说a和b定义有误,我就改为a(1:5),b(1:5),但是表达式不知道咋改。有没有类似的教程啥的

dingd 发表于 2008-10-29 13:56

你用的版本太老了吧?试试2.0以后的。

qingdaocdp 发表于 2008-10-29 15:39

回复 6楼 dingd 的帖子

哪有2.0或者2.5的下载地址,或者给我传一个,多谢了!

weilinhy 发表于 2008-11-20 00:05

我买了一个2.5   现在运行不了 不知道为什么 启动就是说内存某个地方错误 不能读写 接着就没反应了
不知道是软件问题 还是我内存问题

geni2003 发表于 2008-12-30 20:44

这的确是个问题,比如我的矩阵是12个52×100的放在1stopt中来相乘实在不是一点麻烦:@(
还有请问一下,1stopt中可否读写文件方式来优化,看了一下帮助,可以用externalexe来做,但没有具体的例子,不知有没有大侠试过?

[ 本帖最后由 geni2003 于 2008-12-30 21:07 编辑 ]

dingd 发表于 2009-1-2 23:27

可以直接读取Excel文件数据:
DataSet;
      a,b="c:\data files\test.xls]";
EndDataSet;
Function For(i=1:5,a,b)(1/(x1+x2*a^(x3))+x4*a^x5-b=0.1*i);

geni2003 发表于 2009-1-2 23:33

dingd版主,1stopt可否调用其它程序生成的dll,看了帮助,
//Constant M=100;
parameters x1[-100,100],x2[-100,100];
CallExternalDll "ExtDll.dll OptFunc"; //External Dll file name
是演示代码,试着编了一个简单的dll文件,但根本用类似演示的代码无法运行,
出来的结果是 :parameter x1[-100,100] MinFunctionCallExternalDll "sample.dll sample" = parameter x1[-100,100] minfunctionCallExternalDll sample.dll sample
请dingd版主看看这个是怎么解决的,谢谢

[ 本帖最后由 geni2003 于 2009-1-2 23:44 编辑 ]
页: [1]
查看完整版本: 新手求助1stOpt求解超定非线性方程组