变参数Matlab函数
我需要帮助找出如何编码以下问题。任何帮助都将不胜感激 创建一个函数,该函数将为变参数Matlab函数,matlab,function,debugging,Matlab,Function,Debugging,我需要帮助找出如何编码以下问题。任何帮助都将不胜感激 创建一个函数,该函数将为x(1byn)获取向量/数组输入,为a获取标量输入,并生成由以下等式定义的输出: y(x,a)=((xsin(ax-2))/(sqrt(1+(ax)^2) -π ≤ x ≤ π a={.5 1 1.5 2} 方程必须按照x进行矢量化,函数的输出是数组y,该数组与数组x具有相同的维数 编写一个脚本,调用此函数计算上述定义的x范围内的y(x,a),以及参数a的每个值。对于a的每个值,应使用溶液矩阵的不同行将结
x
(1byn
)获取向量/数组输入,为a
获取标量输入,并生成由以下等式定义的输出:
y(x,a)=((xsin(ax-2))/(sqrt(1+(ax)^2)
-π ≤ x ≤ π
a={.5 1 1.5 2}
方程必须按照x
进行矢量化,函数的输出是数组y
,该数组与数组x
具有相同的维数
编写一个脚本,调用此函数计算上述定义的x
范围内的y(x,a)
,以及参数a
的每个值。对于a
的每个值,应使用溶液矩阵的不同行将结果存储在溶液矩阵中
到目前为止,我的职能是:
function [y] = part1(a,x)
y=((x*sin(a*x-2))/(sqrt(1+(a*x).^2)));
end
我不知道如何将其输出到解决方案矩阵中
对于我的脚本,我有:
%%
clear,clc
a={0.5 1 1.5 2};
x=-pi:0.1:pi;
for
part1(x,a)
end
现在运行此操作时,我遇到以下错误:
Undefined function 'mtimes' for input arguments of type 'cell'.
Error in part1 (line 4)
y=((x*sin(a*x-2))/(sqrt(1+(a*x).^2)));
Error in labtest2 (line 8)
y(i,:)=part1(x,a(i));
编辑
我已经做了一些更改,但仍然遇到一些无法解决的错误
下面是函数的完整代码,后面是脚本的完整代码:
作用
function [y] = part1(x,a)
nx=numel(x);
na=numel(a);
y=((x.*sin(a.*x-2))./(sqrt(1+(a.*x).^2)));
size(y)=[nx na]
end
function [y] = part1(x,a)
y=((x.*sin(a.*x - 2))./(sqrt(1 + (a.*x).^2)));
end
剧本
%%
clear,clc
a={0.5 1 1.5 2};
x=-pi:0.1:pi;
for i = 1:length(a)
y(i,:)=part1(x,a(i));
end
%%
clear all;
clc;
close all;
x=[-pi:.1:pi];
a=[.5:.5:2];
for i=1:length(a)
y(i,:)=part1(x,a(i));
plot(x,y)
end
Sol=[y]
错误
Undefined function 'times' for input arguments of type 'cell'.
Error in part1 (line 6)
y=((x.*sin(a.*x-2))./(sqrt(1+(a.*x).^2)));
Error in labtest2 (line 8)
y(i,:)=part1(x,a(i));
你快到了。注意你已经写了
function [y] = part1(a,x)
但你在剧本中把它称为
part1(x,a)
所以你可能应该纠正这一点
我突然想到几件事:
- 您从未将
的输出分配给任何对象。我告诉过你 对于a的每个值,应使用不同的溶液矩阵行将结果存储在溶液矩阵中part1(x,a)
a
的第一个元素的part1()。因为我们在向量x
上操作,所以该行将有多个列。您的输出确实是一个矩阵。在您的例子中,length(-pi:0.1:pi)=63
,因此size(y)=[4 63]
,其中y
是您的输出矩阵
- 您的
for
循环是向后的。您被告知接受标量a
和向量x
。因此,您的脚本应该类似于:
a = 0.5:0.5:2;
x = -pi:0.1:pi;
for i = 1:length(a)
y(i,:) = part1(x, a(i));
end
请注意和运算符的使用。我想在1到length(a)
(在本例中,length(a)==4
)之间进行迭代,以便使用当前a(I)
值作为输出矩阵y
的索引。y(i,:)
中的:
运算符表示“第i
行和所有y
列将采用第1部分(x,a(i))输出的值
”
- 您的功能需要更改为。请注意,例如,
x*sin(a*x-2)
适用于标量x
,但不适用于向量。这是因为x
是一个向量,sin(a*x-2)
也是一个向量(因为sin
调用将逐个元素操作,a
是一个标量)。尝试将两个向量相乘将导致错误,因为MATLAB将尝试执行矩阵相乘。通过将*
替换为*
来解决此问题。通过这种方式,很明显,你要将这两个向量逐元素相乘。您还需要将/
更改为/
另一方面,感谢您在请求帮助之前尝试做家庭作业。我们收到了大量学生提出的问题,这些学生在把自己的作业推给我们之前没有尝试过自己做,因此,让人耳目一新的是,MATLAB标签的常客得到了实际的帮助,而不是告诉人们自己做自己的工作。对于类型为“cell”的输入参数,您得到未定义函数“times”的原因是您的变量a
是一个单元格数组。您需要将a
的分配从
a={0.5 1 1.5 2};
到
这将使它成为一个普通数组。或者,您需要使用单元格数组表示法引用它:a{i}
而不是a(i)
最终解决了整个问题
作用
function [y] = part1(x,a)
nx=numel(x);
na=numel(a);
y=((x.*sin(a.*x-2))./(sqrt(1+(a.*x).^2)));
size(y)=[nx na]
end
function [y] = part1(x,a)
y=((x.*sin(a.*x - 2))./(sqrt(1 + (a.*x).^2)));
end
剧本
%%
clear,clc
a={0.5 1 1.5 2};
x=-pi:0.1:pi;
for i = 1:length(a)
y(i,:)=part1(x,a(i));
end
%%
clear all;
clc;
close all;
x=[-pi:.1:pi];
a=[.5:.5:2];
for i=1:length(a)
y(i,:)=part1(x,a(i));
plot(x,y)
end
Sol=[y]
好的,我修复了代码中的一些错误,并做了您建议的更改,但我仍然有两个问题1。如何为第一部分分配输出解决方案矩阵?2.我的代码目前看起来是这样的:a={0.511.522};x=-pi:0.1:pi;对于i=1:length(a)y(i,:)=part1(x,a(i));结束我在这里得到一个错误,声明“labtest2(第8行)中的错误y(I,:)=part1(x,a(I));”我猜我无法将代码添加到注释中。。。我正在用新的问题/错误更新原始问题我刚刚检查了你的函数-你需要使用元素对元素的乘法。请看我的编辑,马上就来。非常感谢您的帮助。我知道这似乎是一个愚蠢的简单问题,但我已经被难倒好几个小时了,我已经到处寻找帮助。我只是补充说你需要将/
更改为/
。不用担心帮助!这就是为什么。每个人都必须以某种方式开始学习。我们只是要求MATLAB学生在来到我们的社区寻求帮助之前尝试他们的家庭作业。我很高兴你先花时间尝试这项工作。你不需要像分配x
、a
或Sol
那样分配[]
内容<例如,代码>-pi:.1:pi
已经是一个向量。事实上,有时候这样做是件坏事。