我需要帮助找出如何编码以下问题。任何帮助将不胜感激!
创建一个函数,该函数将x
(1 by n
)的矢量/数组输入和a
的标量输入,并生成由以下等式定义的输出:
y(x,a)=((xsin(ax-2))/(sqrt(1+(ax)^2)
-π ≤ x ≤ π
a={.5 1 1.5 2}
方程式必须按照x
进行矢量化,函数的输出是数组y
,它与数组x
具有相同的维度。
编写一个调用此函数的脚本,以计算上面定义的y(x,a)
范围和参数x
的每个值的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
脚本
%%
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
错误
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));
答案 0 :(得分:2)
您获得Undefined function 'times' for input arguments of type 'cell'
的原因是因为您的变量a
是一个单元格数组。您需要从
a
的作业
a={0.5 1 1.5 2};
到
a=[0.5 1 1.5 2];
这将使它成为一个普通的数组。或者,您需要使用单元格数组表示法引用它:a{i}
而不是a(i)
。
答案 1 :(得分:0)
你快到了。请注意,您已经写过
function [y] = part1(a,x)
但您在脚本中将其称为
part1(x,a)
所以你应该纠正它。
我突然想到了一些事情:
part1(x,a)
的输出分配给任何内容。你被告知
对于每个a值,使用解决方案矩阵的不同行将结果存储在解决方案矩阵中。
part1()
的{{1}}的第1个元素。由于我们在作为向量的a
上运行,因此该行将具有多个列。你的输出确实是一个矩阵。在您的情况下,x
,因此length(-pi:0.1:pi) == 63
,其中size(y) == [4 63]
是您的输出矩阵。
您的y
循环是向后的。您被告知接受标量for
和向量a
。因此,您的脚本应该是这样的:
x
请注意使用length
和:
运算符。我想在1到a = 0.5:0.5:2;
x = -pi:0.1:pi;
for i = 1:length(a)
y(i,:) = part1(x, a(i));
end
之间进行迭代(在本例中为length(a)
),以便我可以使用当前length(a) == 4
值作为输出矩阵a(i)
的索引。 y
中的:
运算符表示“y(i,:)
行和i
的所有列将采用y
输出的值。“
part1(x,a(i))
适用于标量x*sin(a*x-2)
,但不适用于矢量。这是因为x
是一个向量而x
也是一个向量(因为sin(a*x-2)
调用将逐个元素地运行,而sin
是一个标量)。尝试将两个向量相乘会导致错误,因为MATLAB将尝试执行矩阵乘法。将a
替换为*
即可解决此问题。通过这种方式,您可以明确地将这两个向量逐元素相乘。您还需要将.*
更改为/
。另一方面,感谢您在向SO寻求帮助之前尝试做作业。我们已经收到了大量的学生提出的问题,这些学生在将它们倾倒在我们身上之前没有尝试做自己的工作,所以我们很清楚,MATLAB标签的常客会得到实际帮助,而不是告诉人们去做自己的工作。
答案 2 :(得分:0)
终于搞定了整个事情。
功能
function [y] = part1(x,a)
y=((x.*sin(a.*x - 2))./(sqrt(1 + (a.*x).^2)));
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]