równanie Laplacea

0

witam , mam problem z napisaniem w c lub Matlabie programu , który rozwiązuje Równanie Laplacea metoda Jacobiego , dowolny warunek brzegowy, np [0,1] , z macierza 11X11... nie wiem kompletnie od czego powinnam zaczac pisac prokram, kod, pomógłby mi ktoś?

0
 #include<iostream>
#include<fstream>
#include<conio.h>
#include<math.h>

using namespace std;

const int iter = 3000;      // liczba iteracji

const float eps = 0.01;

const  float pi = 3.141;

const int terms = 100;

const int  L =1;
const float step = 0.02;
const float xo = 0.0;
const float yo = 0.0;

float 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("Wyniki obliczen1.txt");
   analt.open("Wyniki analityczne1.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] = 11;
         }
         
         else
         {
           macierzK[i][j]=0.0; 
         }    
              
      }    // inicjalizacja macierzy , warunki brzegowe    
      
   } 
   
   for(int i = 0; i < rozmiar + 1; ++i)    // inicjalizacja
   {  
      for(int j = 0; j < rozmiar + 1; ++j)
      {
         macierzA[i][j] = 0;     
      }
   }             
              
   
   for(int i = 0; i < rozmiar + 1; ++i)    // wyniki z formuły analitycznej
   {  
      for(int j = 0; j < rozmiar + 1; ++j)
      {  
          macierzA[i][j] = analityczne(xo + i*step,yo + j*step,terms);
      }
      
   }  

Czy dobrze napisałam kod? bo wyskakuje mi błąd.,..

0
float rozmiar = L/step;

double macierzK [rozmiar+1][rozmiar+1];

error: size of array 'macierzK' has non-integral type 'float'

Rozmiar tablicy musi być typu całkowitego.

0

I nawiasu zamykającego main'a brakuje...

0

tak napisa lam program , ale czy dobrze?

 #include<iostream>
#include<fstream>
#include<conio.h>
#include<math.h>

using namespace std;

const int iter = 3000;      // liczba iteracji

const float eps = 0.01;

const  float pi = 3.141;

const int terms = 100;

const int  L =1;
const float step = 0.02;
const float xo = 0.0;
const float yo = 0.0;

float 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("Wyniki obliczen1.txt");
   analt.open("Wyniki analityczne1.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] = 11;
         }
         
         else
         {
           macierzK[i][j]=0.0;
         }   
             
      }    // inicjalizacja macierzy , warunki brzegowe   
     
   }
   
   for(int i = 0; i < rozmiar + 1; ++i)    // inicjalizacja
   { 
      for(int j = 0; j < rozmiar + 1; ++j)
      {
         macierzA[i][j] = 0;     
      }
   }             
             
   
   for(int i = 0; i < rozmiar + 1; ++i)    // wyniki z formuły analitycznej
   { 
      for(int j = 0; j < rozmiar + 1; ++j)
      { 
          macierzA[i][j] = analityczne(xo + i*step,yo + j*step,terms);
      }
     
   }  
0

Moze podaj jakies wzory zeby to mozna bylo sprawdzic.

0

http://mst.mimuw.edu.pl/lecture.php?lecture=mo2&part=Ch5#S3.SS1 tu jest o tej metodzie Jacobiego.
a rówanie Laplacea ma postać jak na http://pl.wikipedia.org/wiki/R%C3%B3wnanie_r%C3%B3%C5%BCniczkowe_Laplace%27ae%27a tylko że rozważam tu dwa wymiaru.
Warunki brzegowe od 0 do 1. Rozważac mam rozwiązanie na siatce.

I mam tu otrzymać macierz 11x 11 ale tu kompletnie nie mam pojęcia o co chodzi

1 użytkowników online, w tym zalogowanych: 0, gości: 1