f=(double)(double)
时间: 2023-10-22 19:10:19 浏览: 27
这段代码是一个类型转换,将一个 double 类型的值转换成 double 类型。这个转换看起来是多余的,因为一个 double 值已经是 double 类型了,但是这个代码中有两个 double,第一个 double 是类型转换的关键字,第二个 double 是转换后的类型。所以这个转换实际上是没有作用的,可以直接去掉其中一个 double。
相关问题
function f= [fun(y)] global p x yi1 yi2 yi3 zi1=double(y(:,1).*y(:,2)); zi2=double(y(:,1).*y(:,3)); zi3=double(y(:,1).*y(:,4)); f=double(0); for i=1:234 f=f+(2*p(i,1).*(1-x(i,1)).*y(i,1)+p(i,1).*yi3(i,1).*(y(i,2)-zi1(i,1))+p(i,1).*zi1(i,1).*(1-yi1(i,1))+p(i,1).*zi1(i,1).*(1-yi2(i,1))+p(i,1).*zi1(i,1).*(1-yi3(i,1))) end f=double(f); end此时又要满足f为列向量,又要满足f是double形式,此时该如何解决
根据你提供的函数代码,`f` 是一个标量,并且在函数的最后将其转换为 `double` 类型。如果你希望将 `f` 改为一个列向量,并保持其为 `double` 类型,可以将其定义为一个空的列向量,并在循环中使用索引将每次迭代计算的结果添加到该列向量中。修改代码如下:
```matlab
function f = fun(y)
global p x yi1 yi2 yi3
zi1 = double(y(:,1) .* y(:,2));
zi2 = double(y(:,1) .* y(:,3));
zi3 = double(y(:,1) .* y(:,4));
f = zeros(234, 1); % 将 f 定义为一个空的列向量
for i = 1:234
f(i, 1) = 2*p(i,1)*(1-x(i,1))*y(i,1) + p(i,1)*yi3(i,1)*(y(i,2)-zi1(i,1)) + p(i,1)*zi1(i,1)*(1-yi1(i,1)) + p(i,1)*zi1(i,1)*(1-yi2(i,1)) + p(i,1)*zi1(i,1)*(1-yi3(i,1));
end
f = double(f); % 将 f 转换为 double 类型
end
```
这样,`f` 就是一个大小为 234x1 的列向量,并且每次迭代计算的结果都会被添加到该列向量中。同时,最后将 `f` 转换为 `double` 类型。
希望这次修改可以解决你的问题。如果还有其他问题,请随时提问。
为什么F=subs(f, symvar(f), x0);会运行很久但是F=double(subs(f, symvar(f), x0));很快
哦,这个问题涉及到 MATLAB 的符号计算和数值计算的差别。当使用 symvar(f) 获取 f 函数的全部符号变量时,此时 f 函数已经被处理成符号表达式。而在 subs 函数中,subs(f, symvar(f), x0) 的实现是替换符号表达式中的所有符号变量为数值 x0,这个过程需要逐个遍历符号表达式中的每一个变量,所以比较耗时。而使用 double() 函数将符号表达式转换成数字类型,然后再进行替换操作,这样计算时会更快,因为数字类型的计算比符号类型的计算更加高效。所以 F=double(subs(f, symvar(f), x0)) 运行的更快。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)