Finding the last value of a difference equation
    8 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
Hello!
So I've been assigned to solve this equation:
 
 where A is a positive nymber and 0<=n<= N-1, while also N=30 
Furthermore I have an initial value of y(-1)=3. I'm looking to find the last value of this equation (so for n=29).
Last, I want my function to be called back by using this code:
result = my_matlab_function(A,N);
disp(['A= ' num2str(A) 'Result=' num2str(result)])
This is what I've managed to write so far, yet MATLAB won't accept it:
function res = my_matlab_function(A,n)
assume(A,'positive');
n:0:1:29;
y(-1)=3;
y(n)=(1/2)*(y(n-1)+(A^2)/(y(n-1)));
result = my_matlab_function(A,N);
disp(['A= ' num2str(A) 'Result=' num2str(result)])
end
2 Kommentare
Antworten (2)
  Yongjian Feng
    
 am 24 Jan. 2022
        Use:
y(end) = -3
5 Kommentare
  Yongjian Feng
    
 am 27 Jan. 2022
				
      Bearbeitet: Yongjian Feng
    
 am 27 Jan. 2022
  
			You need to call this function with an A value. 
- Save the function as my_matlab_function.m. It is a function that takes an input argument A.
function res = my_matlab_function(A)
    if A < 0
        % you don't really need this. You use A^2 later, it doesn't really
        % matter A < 0 or not
        disp('A must be positive');
        return;
    end
    % initialize the first one in the list
    y(1) = 3;
    % you want apply the expression from n = -1 to n = 29
    % but matlab has to start with i = 0. So it is i from 1 to 31
    N = 31;
    for i=2:N
        % each y(i) depends on y(i-1)
        y(i)=0.5*(y(i-1)+((A^2)/y(i-1)));    
    end
    % plot it if you want to see how it goes through different n
    % plot(1:N, y);
    disp(['A= ' num2str(A) '; Result=' num2str(y(N))]);
    res = y(N);
end
- From command line, call this function with an A value. Something like:
my_matlab_function(100)
  Torsten
      
      
 am 24 Jan. 2022
        Then iterate 2-times more starting with n=1 instead of n=-1.
function res = my_matlab_function(A,N)
  y = zeros(N+1,1)
  y(1) = 3;
  for i = 1:N
    y(i+1) = 0.5*(y(i) + A^2/y(i))
  end
  res = y(end)
end
6 Kommentare
  Torsten
      
      
 am 26 Jan. 2022
				Well, maybe I was not clear in my answer: A has to be prescribed, it can't be deduced.
At least if you don't modify your question somehow.
And again: Arrays in Matlab start with index 1. 0 gives an error message.
Siehe auch
Kategorien
				Mehr zu Annotations finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




