我需要帮助找出如何编码以下问题。任何帮助都将不胜感激!
创建一个用于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)范围和参数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));发布于 2013-06-05 02:18:46
你快到了。注意你写的
function [y] = part1(a,x)但在你的剧本里你把它叫做
part1(x,a)所以你应该纠正一下。
有几件事突然出现在我面前:
part1(x,a)的输出分配给任何东西。你被告知
对象的每个值使用解决方案矩阵的不同行将结果存储在解决矩阵中。 What I take this to mean is that the 1st row corresponds to `part1()` evaluated for the 1st element of `a`. Since we're operating on `x` which is a vector, that row will have multiple columns. Your output is indeed a matrix. In your case, `length(-pi:0.1:pi) == 63`, therefore `size(y) == [4 63]`, where `y` is your output matrix.
for循环是向后的。您被告知接受标量a和向量x。因此,您的脚本应该如下所示:
A= 0.5:0.5:2;x= -pi:0.1:pi;for i=1:长度(A) y(i,:) = part1(x,a(i));结束注意length和:运算符的使用。我希望在1到length(a)之间迭代(在本例中是length(a) == 4),以便可以将当前的a(i)值用作输出矩阵y的索引。:运算符在y(i,:)中表示“y的i第四行和所有列将接受part1(x,a(i))输出的值”。
x*sin(a*x-2)适用于标量x,而不是向量。这是因为x是向量,sin(a*x-2)也是向量(因为sin调用将逐元素操作,a是标量)。试图将两个向量相乘将导致误差,因为MATLAB将尝试执行矩阵乘法。通过用*替换.*来解决这个问题。这样,你将把这两个向量元素逐个乘以,这是明确的。您还需要将/更改为./。另外,感谢你在寻求帮助之前尝试做家庭作业。我们从学生那里得到了大量的问题,他们在把自己的工作扔给我们之前没有尝试过,所以我们经常使用MATLAB标签来帮助别人,而不是让人们做自己的工作,这令人耳目一新。
发布于 2013-06-05 06:37:35
获得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)。
发布于 2013-06-05 22:54:45
终于把整件事解决了。
函数
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] https://stackoverflow.com/questions/16930300
复制相似问题