witam, mam program liczący równanie Laplace'a , teraz na jego podstawie mam obliczyć równanie Poissona ze źródłem, które jest dane <ort>d2/dx2+d2/dy2=6xy(1-y)-2x^3 </ort>
a kod liczący Laplacea mam taki:
const float pi = 3.14;
const int terms = 100;
const int L =1;
const float step = 0.01; // krok
const float xo = 0.0;
const float yo = 0.0;
int rozmiar = L/step;
double analityczne (double x, double y, int koniec )
{
double suma = 0.0;
for(int n = 1;n <= koniec;n += 2)
{
suma += ((400.0)/(pi*n)) * sin(n*pi*x/L) * sinh(n*pi*y/L)/sinh(n*pi);
}
return suma;
}
main()
{
ofstream dane;
ofstream analt;
dane.open("obliczenia.txt");
analt.open("analitycznie.txt");
double macierzK [rozmiar+1][rozmiar+1];
double macierzP [rozmiar-1][rozmiar-1];
double macierzA [rozmiar+1][rozmiar+1];
for(int i = 0; i < rozmiar+1; ++i)
{
for(int j = 0; j < rozmiar+1; ++j)
{
if ((i == rozmiar))
{
macierzK[i][j] = 0.0;
}
else
{
macierzK[i][j]=0.0;
}
}
}
for(int i = 0; i < rozmiar + 1; ++i)
{
for(int j = 0; j < rozmiar + 1; ++j)
{
macierzA[i][j] = 0;
}
}
for(int i = 0; i < rozmiar + 1; ++i) // wyniki analityczne
{
for(int j = 0; j < rozmiar + 1; ++j)
{
macierzA[i][j] = analityczne(xo + i*step,yo + j*step,terms);
}
}
// METODA GAUSSA SEIDLA
for(int k = 1; k <= iter;++k)
{
for(int i = 1; i < rozmiar ; ++i)
{
for(int j = 1; j < rozmiar ; ++j)
{
macierzK [i][j] = ( macierzK[i-1][j] + macierzK[i+1][j] + macierzK[i][j-1] + macierzK[i][j+1] )/4;
}
}
if(k == iter - 1)
{
for(int i = 0; i < rozmiar - 1; ++i)
{
for(int j = 0; j < rozmiar - 1; ++j)
{
macierzP[i][j] = macierzK[i+1][j+1];
}
}
}
}
for(int i = 0; i < rozmiar - 1; ++i) // zmiany potencjalu
{
int l = 1; // deklaruję pomocniczą zmienną
for(int j = 0; j < rozmiar - 1; ++j)
{
if((macierzK[i+1][j+1] - macierzP[i][j]) > eps)
{
cout<<"zwiekszyć dokladnosc"<<endl;
l = 0;
}
break;
}
if(l ==0)
break;
}
cout<<endl;
cout<<endl;
for(int i = 0; i < rozmiar+1; ++i)
{
for(int j = 0; j < rozmiar+1; ++j)
{
dane<<"{"<<xo + i*step <<","<<yo + j*step<<","<<macierzK[i][j]<<"},"<<endl;
}
cout<<endl;
}
cout<<endl;
cout<<endl;
for(int i = 0; i < rozmiar+1; ++i)
{ // wyniki analityczne
for(int j = 0; j < rozmiar+1; ++j)
{
analt<<"{"<<xo + i*step<<","<<yo + j*step<<","<<macierzA[i][j]<<"},"<<endl;
}
cout<<endl;
}
cout<<endl;
cout<<endl;
for(int i = 0; i < rozmiar - 1; ++i) // wyniki pomocnicze
{
for(int j = 0; j < rozmiar - 1; ++j)
{
}
cout<<endl;
}
cout<<endl;
getch();
dane.close();
analt.close();
}
jak teraz zmodyfikować ten kod by ująć źródło?