カオスの定義に用いられるリアプノフ数を
実験値(時系列データ)から求めたいのですが,
何か参考になる文献(論文)などあったら
教えてください.
某論文によれば,Wolfのアルゴリズムを用いるのが
一般的とありましたが,
もし,Wolfのアルゴリズムを用いてリアプノフ数の
算出するプログラムが一般に公開されているなら
そのソースを教えてください.
よろしくお願いします.

このQ&Aに関連する最新のQ&A

A 回答 (1件)

えっと、全然答えられる内容ではないので恐縮ですが、ここではなくて「数学」のところで質問されてはどうでしょう。

もしかしたら分かる人がいるかも知れませんよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q2 ~ 200 の素数 a, b, c (a < b < c) が、b - a = c - b を満たすa,b,cをビット操作を用いて求め、すべてを表示せよ

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&(1<<(i-1))&&(intval&(i+j-1))&&(intval&(1<<(i+2*j-1)))) print("%3d %3d %3d (%3d)\n",i,i+j,i+2*j,j);
}/*三つ子の素数を調べ出力

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&...続きを読む

Aベストアンサー

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

第iビットを1にするときは
intval[i>>5]|=1<<(i&31);

とすれば良いでしょう。
関数やマクロを用意することをお勧めします。
例えば
int get(int intval[],int i)
{
return (intval[i>>5]>>(i&31))&1;/*0か1が返って来る。*/
}

void on(int intval[],int i)
{
intval[i>>5]|=1<<(i&31);
}

という感じです。

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

...続きを読む

Q1,1,2,3,5,8,13の合計

初心者ですみませんが、1,1,2,3,5,8,13の合計を出すプログラミングがどうしてもわかりません。どなたかご教示頂けましたら助かります。
宜しくお願いいたします。

Aベストアンサー

#include <stdio.h>

int main(void)
{
   printf("%d\n", 1+1+2+3+5+8+13);
}

Q2次関数の最小値をC言語と遺伝的アルゴリズム(GA)を用いて求めたいです汗

私は機会系の大学生のものです。

今回は
2次関数の最小値をプログラムのC言語と遺伝的アルゴリズム(GA)を用いて求めたいのですが
私がC言語が素人のためプログラムを作れません...。例として教えていただけると幸いです。

よろしくお願い致します。

Aベストアンサー

作ってみた
https://gist.github.com/otaks/3c6eebea260ce1296da2b9a2d03fd421

各遺伝子は5要素の配列から成っており、
[3][2][1][0]を2進数に見立てて、これを10進数に変換し
[4]を元に符号をつけている。

ユーザ入力は以下を参考に。
(平方完成後の値を入力するようになっています)
y=a(x+q)2+q
(minx<=x<=maxx)

50世代ぐらい回せば正解が出そう。

中学校当たりの問題は解けそうだけど、今の作りだとxが-15~15しか
表現できないし、精度は整数レベルなので、より難しい問題を解くならば
改造が必要。

QBresenhamのアルゴリズムを用いた円描画

一つ下の質問をした後に、いろいろ考えて作ったプログラムなのですが、コンパイルが通りません。
頭がこんがらがってしまったので、教えていただけるとうれしいです。

main(){
   int x, y, r, d;

   printf("Enter coordinates of radius of circle. R = ");
   scanf("%d\n", &r);

   x = 0;
   y = r;
   d = 3 - 2 * r;

   while(y > x){
     plotcircle(x, y, r);
     if(d < 0){ /* select U */
        d = d + 4 * x + 6;
     }else{ /* select D */
        d = d + 4 * (x - y) + 10;
        y = y - 1;
     }
     x = x + 1;
   }

   if(x == y){
     plotcircle(x, y, r);
   }
}


plotcircle(int x, int y, int r){
   putpixel( x, y, r);
   putpixel( y, x, r);
   putpixel( y, -x, r);
   putpixel( x, -y, r);
   putpixel(-x, -y, r);
   putpixel(-y, -x, r);
   putpixel(-y, x, r);
   putpixel(-x, y, r);
}

一つ下の質問をした後に、いろいろ考えて作ったプログラムなのですが、コンパイルが通りません。
頭がこんがらがってしまったので、教えていただけるとうれしいです。

main(){
   int x, y, r, d;

   printf("Enter coordinates of radius of circle. R = ");
   scanf("%d\n", &r);

   x = 0;
   y = r;
   d = 3 - 2 * r;

   while(y > x){
     plotcircle(x, y, r);
     if(d < 0){ /* select U */
        d = d + 4 * x + 6;
   ...続きを読む

Aベストアンサー

計算は間違ってないようですので、描画をなんとかすれば動くと思います。

参考まで。(画面を50*50サイズで、円の中心を25,25に固定しています)

#include <stdlib.h>
#include <stdio.h>

char disp[50][50]; // 画面領域の定義(50*50固定)
void plotini(void); // 画面を消す
void plotcircle(int, int, int, int, int); // 画面に点を打つ
void plotdisp(void); // 画面を表示する

int main(){
 int x, y, r, d;

 printf("Enter coordinates of radius of circle. R = ");
 scanf("%d", &r);

 plotini();

 x = 0;
 y = r;
 d = 3 - 2 * r;

 while(y > x){
  plotcircle(x, y, 25, 25, 'X');
  if(d < 0){ /* select up */
   d = d + 4 * x + 6;
  }else{ /* select bottom */
   d = d + 4 * (x - y) + 10;
   y = y - 1;
  }
  x = x + 1;
 }

 if(x == y){
  plotcircle(x, y, 25, 25, 'X');
 }

 plotdisp();

 return 0;
}

void plotini(void) {
 int i,j;
 for (i=0; i<50; i++) for (j=0; j<50; j++) disp[i][j]=' ';
}

void plotcircle(int x, int y, int xc, int yc, int c) {
 int xx,yy;
 xx = xc+x; yy = yc+y; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc+y; yy = yc+x; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc+y; yy = yc-x; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc+x; yy = yc-y; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc-x; yy = yc-y; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc-y; yy = yc-x; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc-y; yy = yc+x; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
 xx = xc-x; yy = yc+y; if (xx>=0 && x<50 && yy>=0 && yy<50) disp[yy][xx]=c;
}

void plotdisp(void) {
 int i,j;
 for (i=0; i<50; i++) {
  for (j=0; j<50; j++) {
   printf("%c",disp[i][j]);
  }
  printf("\n");
 }
}

計算は間違ってないようですので、描画をなんとかすれば動くと思います。

参考まで。(画面を50*50サイズで、円の中心を25,25に固定しています)

#include <stdlib.h>
#include <stdio.h>

char disp[50][50]; // 画面領域の定義(50*50固定)
void plotini(void); // 画面を消す
void plotcircle(int, int, int, int, int); // 画面に点を打つ
void plotdisp(void); // 画面を表示する

int main(){
 int x, y, r, d;

 printf("Enter coordinates of radius of circle. R = ");
 scanf("%d", ...続きを読む

Qmemcpy,memcmp,strcmp,strlen,strcat,

memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。


char *MyMemcpy(char *str1, char *str2, size_t n)
{

char *p1 = str1;
char *p2 = str2;


while(n--){
*p1 = *p2;
p1++;
p2++;
}

return str1;
}
void *MyMemcmp(void *str1, void *str2)
{
char *p1 = (char*)str1;
char *p2 = (char*)str2;
int n = 0, k = 0;

while( *p1 != '\0'){
*p1++;
n++;
}

while( *p2 != '\0'){
*p2++;
k++;
}

if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}

}
char *MyStrcmp(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;
int n = 0, k = 0;

while( *p1 != '\0'){
*p1++;
n++;
}

while( *p2 != '\0'){
*p2++;
k++;
}

if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}

}
size_t MyStrlen(const char *str1)
{
char *p1 = (char*)str1;
size_t len = 0;

while(*p1 != NULL){
*p1++;
len++;
}

return len;
}
char *MyStrcat(char *str1, const char *str2)
{
char *p1 = str1;
char *p2 = (char*)str2;

while(*p1 != NULL){
*p1++;
}
while(*p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}

return str1;
}
char *MyStrcpy(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;

while( *p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}
*p1 = '\0';

return str1;
}
char *MyStrstr(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;

while(*p1 != *p2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;

}
char *MyStrchr(const char *str1, char str2)
{
char *p1 = (char*)str1;

while(*p1 != str2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;
}

memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。


char *MyMemcpy(char *str1, char *str2, size_t n)
{

char *p1 = str1;
char...続きを読む

Aベストアンサー

> この関数をプログラムに組み込んだところうまく動作しませんでした。

どんな風に「うまく動作し」なかったのでしょうか?
それがわからなければ、明らかな間違いでも無いかぎり、答えようがありません。

特に
> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
とあるので、このプログラムと標準関数との違いが、間違いなのか仕様通りなのか判断できません。

例えば、
> char *MyStrcmp(char *str1, char *str2)
プログラムを解読すると

str1とstr2、それぞれの文字列の長さを比較。
→長さ等しい場合は (char *)NULL, 異なる場合は、長い方の文字列へのポインタを返す

と、strcmpとはまったく別の関数になっています。(strcmpは文字列の内容も比較し、結果を 負の整数,0,正の整数 (いずれもint型)で返します)


あと、明確な間違いというわけではないですが。
> while(*p1 != NULL){

大抵の処理系では NULL == '\0' == 0 として使えるけど、ヌルポインタとヌル文字はわけて考えた方がいいです。

> この関数をプログラムに組み込んだところうまく動作しませんでした。

どんな風に「うまく動作し」なかったのでしょうか?
それがわからなければ、明らかな間違いでも無いかぎり、答えようがありません。

特に
> ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
とあるので、このプログラムと標準関数との違いが、間違いなのか仕様通りなのか判断できません。

例えば、
> char *MyStrcmp(char *str1, char *str2)
プログラムを解読...続きを読む


人気Q&Aランキング

おすすめ情報