DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda balestra_romani » 29/01/2012, 18:19

Ho una tabella a 3 colonne con le seguenti variabili:

1° colonna - C
carico massimo

2° colonna - L
lunghezza massima

3° colonna - P
prezzo

Esistono delle leggi matematiche che permettono di determinare P in funzione di C e di L? C ed L sono anche tra loro correlate. Più C é grande minore é il valore di L.
Non posso disegnare i grafici usando le leggi di correlazione che conosco perché gli algoritmi di calcolo sono molto complessi richiodono l'uso di software e nel problema in questione assumono importanza anche un'infinità di altre variabili (almeno 100).
Il mio obiettivo é riuscire a stampare un grafico che possa essere utilizzato senza l'uso del PC in cui l'operatore sceglie un valore di C, di L e valuta il prezzo oppure a creare un software in C apposito semplicissimo.
Il mio problema é di natura matematica perché non so come:

1 – determinare l'inviluppo (prezzo massimo)
2 – determinare la curva di interpolazione (prezzo medio – rischio elevato)
3 – determinare la curva di 'sottoinviluppo' (prezzo minimo – rischio elevatissimo)

Ho Matlab, C# e Mathematica, AutoCAD come software disponibili. Le tabelle sono su excel.

4 – Quale programma mi consigliate?
5 – Su Matlab esistono delle funzioni che mi possono venire utili?

Ciao e grazie
balestra_romani
New Member
New Member
 
Messaggi: 68
Iscritto il: 07/03/2010, 20:50

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda balestra_romani » 31/01/2012, 23:24

Ho provato a scrivere questo:

Codice: Seleziona tutto
length = [2,3,2,3,4,4]';
load = [300,202,602,400,200,102]';
price = [3,4,6,7,8,5]';
F = TriScatteredInterp(length, load, price);
thisPrice = F(2.5, 302)


ma non mi piace molto perché preferirei ottenere una funzione analitica. Il software finale vorrei farlo in Visual C# ma se non trovo un'espressione della F devo convertire in dll e fare mille pasticci per la conversione che non so fare e che non so neppure come imparare a fare.

Attendo fiducioso un vostro aiuto

Grazie
balestra_romani
New Member
New Member
 
Messaggi: 68
Iscritto il: 07/03/2010, 20:50

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda Camillo » 01/02/2012, 10:17

Lo sposto in Informatica per vedere se ha maggiore visibilità.
Camillo
Avatar utente
Camillo
Moderatore
Moderatore
 
Messaggi: 6341
Iscritto il: 31/08/2002, 21:06
Località: Milano -Italy

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda apatriarca » 01/02/2012, 12:11

Potresti chiarire meglio le variabili in gioco? Non ho alcuna idea di quale sia il significato di carico o lunghezza massima in questo contesto. Sembri però interpretare questi valori semplicemente come 3 coordinate in \(\mathbb R^3\). Possiamo quindi ignorare questi concetti?

Che intendi con inviluppo e sottoinviluppo in questo contesto? Visto l'uso di TriScatteredInterp mi è invece abbastanza chiaro il significato di curva di interpolazione, anche se parlerei di superficie in questo caso. Questa superficie passa però esattamente per i punti, è una necessità oppure potrebbe anche solo approssimarli molto bene?

Una curva analitica è in generale complicata da rappresentare su di un computer, a meno che non abbia una forma particolare e che dipenda da una quantità finita di parametri. In tal caso ti ridurresti comunque probabilmente a minimizzare questi parametri con ad esempio il metodo dei minimi quadrati.

Alternativamente, se ammetti l'uso del PC, forse puoi fare ricorso ad un qualche algoritmo di supervised machine learning per risolvere il tuo problema originale senza passare da una sua rappresentazione geometrica.
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda balestra_romani » 01/02/2012, 23:46

Si possiamo tranquillamente ragionare in termini di coordinate. In pratica ho una matrice 300x3 di questo tipo:

M=[
x1 y1 z1
x2 y2 z2
...
xi yi zi
...
xn yn zn
];

da cui voglio ottenere i coefficienti del polinomio di grado n-1 (nel mio caso n=299), sperando nella potenza di calcolo del mio PC, che deve, per logica matematica, essere tangente ad ogni mio punto.

Il problema é che le immagini dei punti Pi(xi,yi,zi) sul piano x-y (dominio della funzione) non sono esattamente disposti su una grilia (o maglia) regolare e la parte di funzione che interessa a me é solo quella in cui ricadono le immagini stesse.

Sempre su matlab ho provato a scrivere:

Codice: Seleziona tutto
x=[-1,-1,1,1]';
y=[-1,0,1,2];
z=exp(-(x.^2*y.^0/100+x*y/140+x.^0*y.^2/50));
P_equalweight=polyfitweighted2(x,y,z,3,ones(101));
P_weighted=polyfitweighted2(x,y,z,3,z);


ma non funziona perché i punti sono in 'disordine'... Non so più a cosa pensare...
Risolto questo problema, o nell'eventualità che il mio processore non riesca a calcolare tutto quanto, sarei anche interessato a fare un'analisi ai minimi quadrati.
A me servirebbe qualche codice di esempio...

Ciao e grazie per il vostro interesse
balestra_romani
New Member
New Member
 
Messaggi: 68
Iscritto il: 07/03/2010, 20:50

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda apatriarca » 02/02/2012, 00:07

Non credo che sia una buona idea quella di usare un polinomio di così alto grado. Anche ammettendo che tu riesca a trovare questo polinomio, potrebbe oscillare troppo e non essere particolarmente utile. Inoltre avrebbe una enorme quantità di parametri e non sarebbe più gestibile dei punti stessi. La triangolazione di Delaunay mi sembrava una buona idea in quanto non ha bisogno di un ordinamento dei vertici, ma forse non è comodo utilizzarla per i tuoi scopi. Cosa dovresti farci di questa superficie una volta ottenuta? A che tipo di domande dovrebbe rispondere?
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda balestra_romani » 02/02/2012, 22:20

Devo creare un programma in Visual C# con relativa interfaccia grafica che noti xi e yi mi calcoli zi interpolato ma dato che non riesco ad esportare la funzione TriScatteredInterp in Visual C#, anche se su matlab in teoria c'é la possibilità, sto costruendo una matrice gigantesca da esportare manualmente su C#. Il lavoro é una porcheria ma non so proprio come fare. Hai capito il mio problema? Non riesco a far dialogare matlab con C#... Mi piacerebbe che qualcuno mi spiegasse il principio da seguire per esportare una funzione creata in matlab o propria di matlab su C#. Ho provato a vedere questo video ma dato che é in inglese non ci capisco nulla... inoltre conosco pure male in C#... sono proprio depresso...
http://www.mathworks.it/products/compiler/
A presto e grazie
balestra_romani
New Member
New Member
 
Messaggi: 68
Iscritto il: 07/03/2010, 20:50

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda apatriarca » 02/02/2012, 22:45

Io credo che ti convenga dimenticare Matlab e concentrarti direttamente su cosa puoi fare in C#. Il problema da te descritto sembra un classico problema di regressione e proverei probabilmente a risolverlo minimizzando ai minimi quadrati una qualche superficie polinomiale. Alternativamente, se ti piace l'idea della funzione TriScatteredInterp, dovresti cercarti classi che calcolino la triangolazione di Dalaunay di una serie di punti (300 non sono molti).
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda balestra_romani » 03/02/2012, 08:31

E' proprio questo il punto, non ho trovato nulla relativamente alla triangolazione di Delaunay su C#... :(
balestra_romani
New Member
New Member
 
Messaggi: 68
Iscritto il: 07/03/2010, 20:50

Re: DA UNA SERIE DI PUNTI P(x,y,z) ALLA FUNZIONE z=f(x,y)

Messaggioda balestra_romani » 03/02/2012, 22:18

Possibile che mai nessuno abbia dovuto usare una funzione di matlab in C... mi sembra molto strano...
balestra_romani
New Member
New Member
 
Messaggi: 68
Iscritto il: 07/03/2010, 20:50

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Perito97 e 0 ospiti