[MatLab] "error: 'b' undefined..." ?

kaspar1
Ciao :smt039

Ho un esercizio da svolgere con Matlab (io uso Octave che dovrebbe essere lo stesso per quello che mi serve.)

Ho definito una funzione (che non è importante esattamente sapere cosa fa...)

function I = trapezi(f, a, b, n)
  H = (b-a)/n;
  S = 0; x = a;
  while x <= b
    S = S + (f(x) + f(x+H));
    x = x+H;
  end
  I = S*H/2;
end


Nella "Command Window" faccio questo:

>> f = @(x) x*exp(-x)*cos(2*x);
>> met_quadr = @(met, n) met(f, 0, 2*pi, n);
>> met_quadr(trapezi, 10);
error: 'b' undefined near line 3 column 8
error: called from
    trapezi at line 3 column 5


Perché quell'errore? [tt]b[/tt] è il nome di un parametro della funzione [tt]trapezi[/tt]...

Risposte
Indrjo Dedej
Ecco la traduzione in Python:

# hello.py

from math import exp, pi, cos

def trapezi(f, a, b, n):
  H, S, x = (b-a)/n, 0, a
  while x <= b:
    S, x = S+f(x)+f(x+H), x+H
  return S*H/2

f = lambda x : x*exp(-x)*cos(2*x)

met_quadr = lambda met, n : met(f, 0, 2*pi, n)


$ python3
>>> from hello import *
>>> met_quadr(trapezi, 10)
-0.15287622420461677 


Quindi penso proprio che

...
>> met_quadr = @(met, n) met(f, 0, 2*pi, n);
...


non fa quel che tu vuoi.

"kaspar":

Ho un esercizio da svolgere con Matlab (io uso Octave che dovrebbe essere lo stesso per quello che mi serve.)


Anche a me viene lo stesso errore; può darsi che sia colpa di Octave, non so, mentre in Matlab il codice gira. :-k

feddy
@OP l'esponenziale in MatLab, come in Python, si scrive
exp(x)
, non
e^

kaspar1
"feddy":
@OP l'esponenziale in MatLab, come in Python, si scrive
exp(x)
, non
e^


Su GNU Octave quella notazione per l'esponenziale va bene. Evidentemente in MatLab no. Correggo.

"Indrjo Dedej":
[...] penso proprio che

...
>> met_quadr = @(met, n) met(f, 0, 2*pi, n);
...


non fa quel che tu vuoi.


Capisco. Dovrò scrivere qualche riga in più, pazienza.


Grazie.

feddy
https://octave.org/doc/v4.2.1/Exponents ... ithms.html

Qui sembra che l'esponenziale sia uguale a matlab,python,ecc. Non ho Octave sul PC al momento, quindi non ho verificato.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.