在以下代码中无法绘制ff = 2的图形:

如何解决在以下代码中无法绘制ff = 2的图形:

import numpy as np
import math
import matplotlib.pyplot as plt
%matplotlib inline

#Class to calculate Camber and Thickness Distribution

class naca:                                                    # defining class naca
    def __init__(self,airfoil):
        self.airfoil = airfoil
        print ('NACA Airfoil is',airfoil,'\n')
        self.__maxcamber=int(airfoil[0:1])/100 
        print ('Maximum Camber of airfoil as a %age of chord is',self.__maxcamber *100)
        self.__pos=int(airfoil[1:2])/10 
        print ('Position of maximum camber from leading edge as a %age of chord is',self.__pos*100)
        self.__thick=int(airfoil[2:4])/100 
        print ('Maximum Thickness of airfoil as a %age of chord is',self.__thick * 100,'\n')


    #Function to calculate Camber  
    def camber(self,x):                                        # defining camber function               
        if x < self.__pos and x>=0:
            z=(self.__maxcamber/(self.__pos**2))*((2*self.__pos*x)-x**2) 
            return z
        elif x>=self.__pos and x<=1:
            z=(self.__maxcamber/((1-self.__pos)**2))*(1-(2*self.__pos)+(2*self.__pos*x)-x**2)
            return z
        else:
            raise Exception ('Entered value of x/c should be between 0 to 1')
  
    #Function to calculate Thickness 
    def thickness (self,x):                                    # defining thickness function        
        if 0<=x<=1:
            t= 5*self.__thick*(0.2969*math.sqrt(x) - 0.1260*x - 0.3516*x**2 + 0.2843*x**3 - 0.1036*x**4)
            return t
        else:
            raise Exception ('Entered value of x/c should be between 0 to 1')
    
#Class to calculate x-derivative of Camber and Thickness distribution function 
class derivative(naca):                                        # parent class naca mentioned in the bracket
        def __init__(self,airfoil):
            super().__init__(airfoil)                          # calling the previous class attributes

        # Finding x-derivative of camber 
        def d_camber(self,xa):   
            h=0.01
            if xa==0:
                dx=(super().camber(xa+h)-super().camber(xa))/h         # forward differencing
                return dx
            elif xa==1:
                dx=(super().camber(xa)-super().camber(xa-h))/h         # backward differencing
                return dx
            else:
                dx=(super().camber(xa+h)-super().camber(xa-h))/(2*h)   # central differencing
                return dx

        # Finding x-derivative of thickness
        def d_thick(self,xa):  
            h=0.01
            if xa==0:
                dt=(super().thickness(xa+h)-super().thickness(xa))/h         # forward differencing
                return dt
            elif xa==1:
                dt=(super().thickness(xa)-super().thickness(xa-h))/h         # backward differencing
                return dt
            else:
                dt=(super().thickness(xa+h)-super().thickness(xa-h))/(2*h)   # central differencing
                return dt
                   
#Class to calculate flow around an arbitary airfoil using thin-airfoil theory
class thinairfoiltheory(derivative):    #parent class mentioned in the bracket
        def __init__(self,airfoil):
            super().__init__(airfoil)    #calling the previous class attributes   
        
        def sectional(self,alphad,f):
            n=15                             ### it is not taking value more than 15. n is actually related to the number of division used in intergration
                                             ##check how to give n=100.For n>15 it is giving error???
                #we have to increase thye value of n for accuracy
            alphar=alphad*(np.pi/180)
            thetal=0
            thetah=np.pi
            h=(np.pi-0)/n
            th=0
            sum1=0
            sum2=0
            sum3=0
            for i in range(1,n): #composite trapezoidal rule used for integration
                th=th+h
                x=0.5*(1-np.cos(th))
                sum1=sum1+super().d_camber(x)
                sum2=sum2+(super().d_camber(x)*np.cos(th))
                sum3=sum3+(super().d_camber(x)*np.cos(2*th))
                               
            xl=0.5*(1-np.cos(thetal))
            xh=0.5*(1-np.cos(thetah))
            
            finalsum1=(h/2)*(super().d_camber(xl)+super().d_camber(xh))+(h*sum1)
            a0=(1/np.pi)*finalsum1
            
            finalsum2=(h/2)*(((super().d_camber(xl))*np.cos(thetal))+((super().d_camber(xh))*np.cos(thetah)))+(h*sum2)
            a1=(2/np.pi)*finalsum2
            
            finalsum3=(h/2)*(((super().d_camber(xl))*np.cos(2*thetal))+((super().d_camber(xh))*np.cos(2*thetah)))+(h*sum3)
            a2=(2/np.pi)*finalsum3
            
            
            cl=2*(np.pi*(alphar-a0)+(np.pi/2)*a1)
            cmc=-(np.pi/4)*(a1-a2)
            
            #print("sectional lift coefficient",cl)
            #print("quatercord point moment",cmc)
            
            if f==1:
                return cl
            elif f==2:
                return cmc

        def plot(self,ff):
                     
            deg=np.linspace(0,30,50) 
            liftcoff=self.sectional(deg,1)
            momcoff=self.sectional(deg,2)
               
                               
            if ff==1:         #graph for lift coefficient
                plt.plot(deg,liftcoff)  
                plt.rcParams['figure.figsize'] = (10,6)           #This fixes the size of plot displayed below
                plt.rcParams.update({'font.size': 15})            #This fixes the font size of parameters in the plot below
                plt.xlabel('Angle of attack in degress')        #This labels the x-axis
                plt.ylabel('Liff coeff')         #This labels the y-axis
                plt.grid(b=True,color='black',alpha=0.3,linewidth=1)
                
            elif ff==2:    #graph for moment coefficient
                ##the moment coeff graph is not plotting.I cannot figure out the problem???
                
                plt.plot(deg,momcoff)  
                plt.rcParams['figure.figsize'] = (10,6)           #This fixes the size of plot displayed
                plt.rcParams.update({'font.size': 15})            #This fixes the font size of parameters
                plt.xlabel('Angle of attack in degress')        #This labels the x-axis
                plt.ylabel('mom coeff')         #This labels the y-axis
                plt.grid(b=True,linewidth=1)

解决方法

您的错误是在代码cmc=-(np.pi/4)*(a1-a2)的这一行上,对于ff = 2,您的section()函数将返回 cmc ,这是一个常量。我认为您的公式必须缺少 alphar 才能计算出不同角度的力矩系数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-