MATLAB Answers

function f(x)=xe^x

132 views (last 30 days)
Deanna Jaramillo
Deanna Jaramillo on 24 Aug 2019
Commented: Steven Lord on 27 Aug 2019
Write a function my_fun.m which returns the value of f(x)=xe^x given an input x. This
function should be a function of x only.


Steven Lord
Steven Lord on 24 Aug 2019
This sounds like a homework assignment. If it is, show us what you've done to try to solve the problem and ask a specific question about where you're having difficulty and we may be able to offer some guidance.
Deanna Jaramillo
Deanna Jaramillo on 27 Aug 2019
yes it was a homework problem. I do not understand much code and I am wanting to learn. The instructor showed us some 'for' loops and 'while' loops and a function program and I am not sure when to use what. Here is the question for the first part.
a) Considering the function
f(x) = xe^x (1)
(a) Write a function my_fun.m which returns the value of (1) given an input x. This function should be a function of x only.
I came up with:
function y=my_fun(x)
Then the next part:
b) Write a function my_mean.m which takes four arguments: 1) a function (my_fun.m), 2) a number a, 3) another number b satisfying a ≤ b, and 4) a positive integer N. This function should return an approximate value for:
Capture.PNG (2)
Where f(x) represents (1). The approximate value of (2) should be calculated via:
h = (b − a)/ N , xj = a + (j − 1)h
HW #1 For example, a call to the function would resemble:
my_mean(@my_fun, 0, 5, 100)
(c) Use my_mean.m and my_fun.m to compute an approximation to
In this case the exact solution for (4) can be computed as:
1/ e
Plot (using semilogy) the absolute error between M and your approximations versus N for:
N(n) = 2n , 1 ≤ n ≤ 13
So, for the codes, I have:
function y= my_mean(my_fun,a,b,N)
for j=1:length(x)
y = (1/N)*(a+((j-1)*h));
and the final for the output plot:
close all
format longg
for j=1:length(N)
xlabel('N', 'Fontsize', 10);
ylabel('M', 'Fontsize', 10);
title('Absolute Error', 'Fontsize', 15)
I got the plot to show up but the y-axis goes from 10^-4 to 10^-1, when the instructor's goes from 10^-4 to 10^0.
How do I know what to use when?
Steven Lord
Steven Lord on 27 Aug 2019
James already discussed your parts b and c, so I just want to offer a little extra information. This is slightly more advanced than you may have learned so far, but it's something that can come in very useful when working with MATLAB.
For part a your function will work as long as the x input to my_fun is a scalar (just one number.) You could modify it ever so slightly to allow it to work on any sized array (a scalar, a vector with ten elements, a 5-by-5 matrix, a 2-by-3-by-4-by-5-by-6 array, etc.) by using the array multiplication operator .* instead of the matrix multiplication operator *. [For scalars they behave the same; for non-scalars they don't.] See the Array vs. Matrix Operations documentation page for more information.

Sign in to comment.

Answers (2)

Star Strider
Star Strider on 24 Aug 2019


Sign in to comment.

James Tursa
James Tursa on 27 Aug 2019
Edited: James Tursa on 27 Aug 2019
Take a look at this loop from your code:
for j=1:length(x)
y = (1/N)*(a+((j-1)*h)); % <-- This replaces y at each step ... it doesn't sum anything up!
And compare it to the summation (3) in the instructions. Two problems: You are not calling your function, and you are not summing anything up. You should be summing up f(xj) values (N of them) and then dividing that sum by N according to the (3) formula. So the loop should be something like this instead:
for j=1:N % <-- Use the limits in the (3) formula
y = y + my_fun(a+(j-1)*h); % <-- Sums up individual calculations into y
y = y/N;
You don't need (or want) that x-linspace(etc) call.


Sign in to comment.

Sign in to answer this question.