查看: 110|回复: 3|关注: 0

[已答复] 非线性方程组不是固定的,如何用matlab实现参数传递

[复制链接]

新手

10 麦片

财富积分


050


3

主题

5

帖子

0

最佳答案
发表于 4 天前 | 显示全部楼层 |阅读模式
子函数:function f=fun3(x)
             a=[1 1 1 1];
             f=0;
             for i=1:4
               f=f+(x(i)/a(i))^2;
            end
主程序.m
              clear
              x0=[0.2 0.3 0.4 0.5];
              [x fval]=fmincon('fun3');
例子中的初值无意义,想请教各位高手三个问题,如何把主程序和子函数写在一个m文件中;子函数中的a是可变的,我如何把它设成一个可传递的参数;vs2017能否调用matlab2015a的算法
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

4

主题

1658

帖子

205

最佳答案
  • 关注者: 95
发表于 4 天前 | 显示全部楼层
function f=fun3(x,p)
% p=[a,b,c,d,...]你想要的参数

[x fval]=fmincon('fun3',[],[],...[],p);
调用时要注意fmincon的形参,如果不需要的开通也得用[]来占位
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


3

主题

5

帖子

0

最佳答案
 楼主| 发表于 4 天前 | 显示全部楼层
coolchen302 发表于 2020-11-22 20:12
function f=fun3(x,p)
% p=[a,b,c,d,...]你想要的参数

参数传递问题已解决,麻烦能否解决第1个和第3个问题
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

4

主题

1658

帖子

205

最佳答案
  • 关注者: 95
发表于 4 天前 | 显示全部楼层
1、把主程序也写成函数的形式,第一行以function打头,然后子程序放在最后即可。这样的话,所有的变量会变成函数的内部变量,不会在公共的workspace中出现
3、其它程序调用matlab,不太好搞,应该是用mex编译后进行处理,原来研究过,非常麻烦,还要配合着数据结构来弄。可以用python,里面也有很多库,和matlab一样的
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

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