Asked by Karel
on 26 Jul 2012

Here is a function I wrote, with N beeing a scalar (example 6) and x a vector (example [0;1;2;3;4;5]). Y1 gets input as 0 in the example and Y2 as (36-x^2)

function [ sort1 , sort2 ] = front(N,x)

Y1=input('frontière inférieure: ','s') ;

s1=vectorize(Y1);

Y2=input('frontière supérieure: ','s');

s2=vectorize(Y2);

sort1= ones(1,N+1);

for d=1:1:N;

b=x(d);

a=s1(b);

sort1(d)=a;

end

sort2= ones(1,N+1);

for d=1:1:N;

b=x(d);

a=s2(b);

sort2(d)=a;

end

end

My problem are the lines a=s1(b) and a=s2(b). My goal is to inject the values of the vector x one by one in the expressions s1 and s2, but: 1)I am not sure my semantics are correct? 2)How does this program reacts when it receives a scalar instead of an expression?

This is what I get when i run the program:

frontière inférieure: 0

frontière supérieure: 36-x^2

??? Attempted to access s1(0); index must be a positive integer

or logical.

Error in ==> front at 12

a=s1(b);

Answer by Davide Ferraro
on 26 Jul 2012

Accepted Answer

Not sure that I've fully understood your goal. From what I've got you may try to use the EVAL function to evaluate your string. This is not the most elegant approach but can be a starting point:

function [ sort1 ] = front(N,x)

Y1=input('frontière inférieure: ','s') ;

s1=vectorize(Y1);

if ~isnan(str2double(s1))

sort1 = repmat(eval(s1),1,N+1);

else

sort1 = eval(s1);

end

end

There's margin to improve the code:

Sign in to comment.

Answer by Image Analyst
on 26 Jul 2012

Sign in to comment.

Answer by Karel
on 26 Jul 2012

Sign in to comment.

Answer by Karel
on 26 Jul 2012

Ill try to explain it better:

so i have this function

function [ sort1 , sort2 ] = front(x,N)

Y1=input('frontière inférieure (y1(x)): ','s') ;

s1=vectorize(Y1);

Y2=input('frontière supérieure (y2(x)): ','s');

s2=vectorize(Y2);

sort1= ones(1,N+1);

for d=1:1:N;

b=x(d);

a=s1(b);

sort1(d)=a;

end

sort2= ones(1,N+1);

for d=1:1:N;

b=x(d);

a=s2(b);

sort2(d)=a;

end

end

x is a vector. The example given is this one [0,1,2,3,4]

N is a number. 5 in the example

The function will ask the user to enter two fronteers. These can either be numbers (example:0) or equations (example:36-x^2)

What I want to achieve is:

if the fronteer is a number, create a vector sort composed soley of that number

if the fronteer is an equation, create a vector sort in which each element is the solution of the equation when the unknow value (x) is replaced by the value of the x vector in that place.

Example: x=[0,1,2,3,4]

N=5

y1=0

y2= 36-x^2

SOLUTION

sort 1= [0,0,0,0,0]

sort 2= [36,35,32,27,20]

Sign in to comment.

Answer by Image Analyst
on 26 Jul 2012

x=[0,1,2,3,4]

so,

b=x(d);

and N = 5, that means b will equal 0, 1, 2, 3, and 4 as the loop iterates. OK, let's look at the first iteration. You say

a=s1(b);

but b = x(1) in the first iteration, which means b = 0 because x(1) = 0. So now you're saying

a = s1(0);

That's just not allowed. You can't have 0 as an index. I hope it's clear now.

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.