How to write m file

3 次查看(过去 30 天)
Greg Thomas
Greg Thomas 2013-2-18
I need help writing a m file function. Any pointers would be great. Thank you.

采纳的回答

Image Analyst
Image Analyst 2013-2-18
There are so many ways to do this. Probably the easiest way for a beginner is the for loop way. Hint:
for tIndex = 1 : length(t)
theSum = a(1);
for k = 2 : length(a)-1
theSum = theSum + a(k) * cos((k-1)*t(tIndex)) + b(k) * sin((k-1)*t(tIndex));
end
y(tIndex) = %%%%%%%%%%% You have to do something to finish your homework
end
Since it's your homework I probably did too much for you, but I didn't do it 100% so at least you can claim some small part as your own.
  2 个评论
Image Analyst
Image Analyst 2013-2-18
编辑:Image Analyst 2013-2-18
No - that's not right. A function that you call from another m-file or the command line has to start with a function keyword. But the rest of what you did was all wrong. The y= line is just an example, like an equation you'd find in a book - it's not MATLAB code. The a= and b= lines are what you're supposed to issue at the command line, or in a script (a separate m-file), not in this one you're supposed to write. Next, you didn't use any of what I showed you - you totally ignored it. Finally, the t= line is wrong. You're not supposed to pass your coefficients (a and b) into linspace() - you're supposed to do exactly what they said:
t = linspace(0,4*pi,500);
on the command line (after a= and b=) or in your script (again, after the a= line and b= line).
I'll give you one more hint. Make an m-file called "part_sum_fs.m" and in it have this:
function y = part_sum_fs(a, b, t)
for tIndex = 1 : length(t)
theSum = a(1);
for k = 2 : length(a)-1
theSum = theSum + a(k) * cos((k-1)*t(tIndex)) + b(k) * sin((k-1)*t(tIndex));
end
y(tIndex) = %%%%%%%%%%% You have to do something to finish your homework
end
return; % from part_sum_fs()
All you need to do is add one word and you're done. Think about what glaring obviously thing it might possibly be.
Then, make a script to test your function called "test_part_sum_fs.m" and in it you have this:
a = [1, 2, 0, 0];
b = [3, 0,-1, 0];
t = linspace(0,4*pi,500); % Makes an array for t
y = part_sum_fs(a,b,t); % Returns an array for y
plot(t,y)
xlabel('t');
ylabel('y');
Then you run that script, which will call your function. title('y=1+2cos(t)+3sin(t)-sin(3t)')
If you want to get fancy, you can program it to handle different length arrays for a and b, like they did. I just added a zero to the last, missing b value to make it easy.
Image Analyst
Image Analyst 2013-2-19
You're welcome. You'll get better with practice. Just look over the FAQ, and search Answers for "tag:tutorial" for some good advice. And of course look in my File Exchange and run demos I post here. In about 3 months you should be up to nearly full speed and be able to program most things with little hesitation.

请先登录,再进行评论。

更多回答(1 个)

Alessandro Renna
Alessandro Renna 2013-2-18
try this:
function [y] = part_sum_fs(a,b,t)
a_0=a(1); a_1=a(2); a_2=a(3);
b_1=b(1); b_2=b(2);
y=a_0+a_1*cos(t)+b_1*sin(t)+a_2*cos(2*t)+b_2*sin(2*t);

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by