我一直在尝试编写一个MATLAB代码,该代码可以使用任意数量的变量接受任何函数进行优化。
function Enter_Optimization_Code
clear all
clc
x=[];
U='';
n=input('Enter the number of variables= ')
U=input('Enter function with variables as x(1), x(2), x(3)..= ','s')
start=input('Enter coordinates of the starting point as [1,3,..]= ')
for i=1:n
x(i)=start(i)
end
int(U)
代码要求用户输入他们想要的变量数,然后输入他们想要优化的函数(我还没有编写优化代码)。现在,我希望代码将起点的值插入函数并吐出答案。
e.g。我输入的函数是x(1)+ x(2),起点为[1,2]。这应该导致代码计算1 + 2 = 3并打印3.这就是发生的事情:
Enter the number of variables= 2
n =
2
Enter function with variables as x(1), x(2), x(3)..= x(1)+x(2)
U =
x(1)+x(2)
Enter coordinates of the starting point as [1,3,..]= [1,2]
start =
1 2
x =
1
x =
1 2
Undefined function 'int' for input arguments of type 'char'.
Error in Enter_Optimization_Code (line 17)
有人可以解决这个问题吗?
答案 0 :(得分:1)
如果您尝试将函数与符号函数int
集成,则无法将字符串输入传递给该函数,它必须是符号表达式,请查看文档。
您可能需要执行int(sym(U))
而不是将字符串U
转换为符号表达式。
根据评论和使用TroyHaskin的建议进行编辑
这是一个应该有效的版本。但是,我不确定为什么这是一个函数,它应该是一个脚本。
function Enter_Optimization_Code
% Not sure why you're using a function, this should really be a script
% clear all should only be used in scripts, not in functions
clc
% n=input('Enter the number of variables= '); not needed
U=input('Enter function with variables as x(1), x(2), x(3)..= ','s');
start=input('Enter coordinates of the starting point as [1,3,..]= ');
f = str2func(['@(x)',U]);
y = feval(f,start);
disp([U 'evaluated at x=([' num2str(start) ']) = ' num2str(y)])
答案 1 :(得分:1)
如果您希望用户以这种方式输入等式,您可以使用str2func
将字符串转换为匿名函数:
fun = str2func(['@(x)',U]);
这适用于x(1)-x(2)^x(3)
等函数文字和有效函数调用my_opt(x)
。