Intersezione fra un'equazione non lineare ed una retta

di il
10 risposte

Intersezione fra un'equazione non lineare ed una retta

Buonasera a tutti, premetto che sono nuovo nel forum. Ho cercato altre discussioni che mi permettessero di risolvere il mio problema ma non ho trovato nulla.
Sto preparando la mia tesi triennale in ingegneria elettrica sul calcolo del punto di lavoro di un circuito magnetico non lineare, pertanto devo trovare analiticamente il punto di intersezione tra un'equazione non lineare (il ciclo di isteresi di un materiale) ed un'equazione lineare (retta di carico del circuito magnetico). Il problema è che non riesco trovare un modo per farlo, in quanto la classica fsolve non mi è di aiuto.
Allego di seguito lo script che ho fin qui realizzato:

clear all
clc

%INIZIALIZZAZIONE DEI DATI IN INGRESSO-------------------------------------
fprintf('\n\nInserimento dei parametri del modello di J-A.\n');
Ms=input('Ms= ');
a=input('a= ');
alpha=input('alpha= ');
k=input('k= ');
c=input('c= ');

fprintf('\n\nInserimento delle dimensioni del circuito magnetico.\n')
Am=input('Am= ');
Ag=input('Ag= ');
lm=input('lm= ');
lg=input('lg= ');
%--------------------------------------------------------------------------


mu0=4.*pi.*1e-7; % Permeabilità magnetica nel vuoto

fprintf('Calcolo dei parametri: \na=%f(A/m), k=%f(A/m), c=%f, Ms=%e(A/m), alpha=%e \n\n',a,k,c,Ms,alpha);

% Valori di campo magnetico H - vettore colonna
H=[0:50000:1500000 1500000:-50000:-1500000 -1500000:50000:1500000]';
M0 = 0; % provino non magnetizzato


[Hmodel,Bmodel] = My_JAmodel(a,k,c,Ms,alpha,H,M0);


%Ciclo di isteresi ottenuto dal modello di J-A sul piano BH (blu) e retta
%di carico (magenta)
figure
hold on
plot(Hmodel./1000, Bmodel,'b','Linewidth',0.4);
xlabel('H [kA/m]');
ylabel('B [T]');
grid;
Hmag=linspace(-1500,0,100);
Bmag=-mu0.*(Ag./Am).*(lm./lg).*Hmag.*1000;
plot(Hmag, Bmag,'m','LineWidth',0.4);
hold off

---------------------------------------fine
"My_JAmodel" è la function per il calcolo dell'equazione non lineare.
Mentre "Bmag=-mu0.*(Ag./Am).*(lm./lg).*Hmag.*1000" è l'equazione lineare.
L'altro problema è che Bmag-Hmag, ed Bmodel-Hmodel, sono "indipendenti" in quanto una dipende dalle dimensioni del circuito magnetico (retta di carico) ed una dipende dal solo materiale (ciclo di isteresi).
Spero si sia capito quello di cui sto parlando. Grazie mille in anticipo!
Allegati:
29168_d999572c0f037edb2fd08b9e781f98a5.png
29168_d999572c0f037edb2fd08b9e781f98a5.png

10 Risposte

  • Re: Intersezione fra un'equazione non lineare ed una retta

    1) Usa i tag CODE (tasto < / >), altrimenti non si capisce niente
    2) Ma è C++? Mi sembrano comandi matlab
    3) Non puoi usare la bisezione? Parti dall'intervallo [-1500, 0] vedi se f(-750) è maggiore del valore sulla retta (no dal grafico), passi all'intervallo [-750, 0], vedi se f(-375) è maggiore del valore sulla retta (no dal grafico)... eccetera, finché arrivi ad un intervallo [X, Y] minore o uguale alla precisione richiesta, a quel punto prendi il valore (X+Y)/2
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Il C/C++ non c'entra nulla ...
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Il codice che hai scritto è in MatLab. Ad ogni modo:
    devo trovare analiticamente il punto di intersezione tra un'equazione non lineare (il ciclo di isteresi di un materiale) ed un'equazione lineare (retta di carico del circuito magnetico). Il problema è che non riesco trovare un modo per farlo, in quanto la classica fsolve non mi è di aiuto.
    i) Semmai intendi l'intersezione (se c'è) tra le **curve** descritte da due equazioni non lineari.
    ii) Usare fsolve significa trovarlo **numericamente**.

    In sostanza, dovrai usare un metodo di ricerca di zeri per la funzione $h(x)=f(x)-g(x)$, dove $f$ e $g$ sono le due equazioni non lineari. Posta le equazioni e vediamo che si può fare.
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Si scusate è MATLAB, ho sbagliato. Il problema è che non riesco a capire come realizzare un algoritmo per la ricerca dell'intersezione, in quanto non ho una espressione dell'equazione non lineare semplice ma deriva da fuction e subfunction. L'equazione non lineare sarebbe "My_JAmodel" che da in uscita due vettori colonna Hmodel e Bmodel. Mentre l'equazione lineare è <Bmag=-mu0.*(Ag./Am).*(lm./lg).*Hmag.*1000>.
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Io avevo pensato a questa function, tuttavia mi da in uscita Hmag=0.
    -------------------------------------------
    function Hmag = My_Intersection(Hmodel,Bmodel)

    N=numel(Hmodel);
    j=1;
    Hmag(j)=0;
    diff=1;
    epsilon=1e-2;
    while (j<=N && diff>=epsilon)
    diff=abs(My_LoadLine(Hmodel(j))-Bmodel(j));
    j=j+1;
    end
    if Hmodel(j)~=0 && Hmodel(j)<0
    Hmag=Hmodel(j);
    disp('intersezione trovata')
    disp(Hmag./1000)
    disp(j)
    end
    end
    --------------------------------------------------
    dove Hmodel e Bmodel sono i vettori colonna in uscita della function per l'equazione non lineare ovvero My_JAmodel, mentre la function My_LoadLine è la retta di carico <Bmag=-mu0.*(Ag./Am).*(lm./lg).*Hmag.*1000>.
    Teoricamente io mi aspetto che, per un valore di Hmodel, abbia che la retta di carico valutata nel punto Hmodel(i) sia uguale a Bmodel(i).
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Scusa, ma come facevi a passare un argomento del genere a fsolve? Non aveva bisogno di una "function handle"?

    Scritta così (non sono del settore), non mi è chiaro e non riesco a capire quali siano le equazioni. Prova a dare delle referenze.
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Purtoppo non riesco a spiegarmi meglio.
    L' equazione lineare è My_LoadLine, che sostanzialmente è una retta passante per l'origine con coefficiente angolare negativo, nelle variabili Hmag (che sarebbe la x) e Bmag (che sarebbe la y). Più nello specifico la sua espressione è <Bmag=-mu0.*(Ag./Am).*(lm./lg).*Hmag.*1000>.
    L'equazione non lineare deriva da un'equazione differenziale del primo ordine ed è descritta dai vettori colonna Hmodel e Bmodel.
    Io devo andare a verificare quando, valutando la My_LoadLine in Hmag=Hmodel(j), si ha che Bmag=Bmodel(j).
    Spero di esser stato più chiaro. Grazie comunque a tutti per l'aiuto.
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Ho capito quello che cerchi di fare, però l'ultima parte non mi è chiara perché non so di cosa stai parlando. Scusa se te lo richiedo, ma potresti fornire delle referenze o un link dove è spiegato quello che devi fare? Ad esempio con l'equazione differenziale che devi e hai risolto?
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Posta in Matlab, che c'è gente che lo usa regolarmente e può risponderti più prontamente
  • Re: Intersezione fra un'equazione non lineare ed una retta

    Weierstrass ha scritto:


    Posta in Matlab, che c'è gente che lo usa regolarmente e può risponderti più prontamente
    Va bene, grazie mille
Devi accedere o registrarti per scrivere nel forum
10 risposte