Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变参数Matlab函数_Matlab_Function_Debugging - Fatal编程技术网

变参数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)
所以你可能应该纠正这一点

我突然想到几件事:

  • 您从未将
    part1(x,a)
    的输出分配给任何对象。我告诉过你

    对于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
已经是一个向量。事实上,有时候这样做是件坏事。