matlab中[x,fval]=fminsearch('x(1)+1/x(1)+x(2)+1/x(2)',[0,0])为什么会报错
时间: 2023-11-06 15:06:04 浏览: 47
在Matlab中使用fminsearch函数时,需要将第一个参数作为函数句柄传递进去,而不是直接传递一个字符串。在这里,您可以将其定义为一个匿名函数或作为一个M文件函数,像这样:
1. 匿名函数的实现方法
```
[x,fval] = fminsearch(@(x) x(1)+1/x(1)+x(2)+1/x(2),[0,0]);
```
2. 定义M文件函数的实现方法
首先,创建一个M文件,例如`myfun.m`,其中包含以下内容:
```
function f = myfun(x)
f = x(1)+1/x(1)+x(2)+1/x(2);
end
```
然后,在命令窗口中使用以下代码:
```
[x,fval] = fminsearch(@myfun,[0,0]);
```
这样就可以成功运行fminsearch函数了。
相关问题
[x0, fval] = fminsearch(@(x) -myfunc(x(1), x(2)), [0, 0]);
这是一个使用 MATLAB 中的 fminsearch 函数进行优化的示例代码。其中,@符号表示将一个函数句柄传入 fminsearch 函数,myfunc 是需要进行优化的目标函数,[0, 0] 是优化的起始点。这段代码的目的是最小化 myfunc 函数在起始点处的负值,从而得到 myfunc 函数在该点处的最大值。
用fminsearch求x(1)+1/x(1)+x(2)+1/x(2)的极小值,而不是最大值
好的,那么我们需要对目标函数进行修改,使其变为求极小值。具体来说,可以将目标函数取相反数,即:
f(x) = -(x(1) + 1/x(1) + x(2) + 1/x(2))
然后再使用 fminsearch 求解即可。下面是一个示例代码:
```matlab
f = @(x) -(x(1) + 1/x(1) + x(2) + 1/x(2));
x0 = [1, 1]; % 初始点
[x, fval] = fminsearch(f, x0);
```
其中,x 是使目标函数取极小值的参数,fval 是目标函数的最小值。
阅读全文